3

渡されるパラメーターは次のとおりです。

`C:\Licenses\testfolder\PERSONAL-Wednesday 04 July-0405.txt`,`c2license.txt`

そして機能は次のとおりです。

/// <summary>
/// Starts serving the download
/// </summary>
public static void InitStoreDownload(string filePath, string serveFileName)
{
    // Get size of file
    var f = new FileInfo(filePath);

    var fileSize = f.Length;
    var extension = f.Extension;

    var context = HttpContext.Current;

    context.Response.Clear();
    context.Response.Buffer = false;

    // Correct mime type
    if (extension.Equals(".zip", StringComparison.CurrentCultureIgnoreCase))
        context.Response.ContentType = "application/octet-stream";
    else if (extension.Equals(".txt", StringComparison.CurrentCultureIgnoreCase))
    {
        context.Response.ContentType = "text/plain";
    }

    context.Response.AddHeader("Content-Disposition", "attachment; filename=" + serveFileName);
    context.Response.AddHeader("Content-Length", fileSize.ToString());
    context.Response.TransmitFile(filePath);
    context.Response.Close();

    context.Response.End();
}

C:\Licenses\testfolder\PERSONAL-Wednesday 04 July-0405.txtサーバー上のファイルの長さは 475 バイトです。

このスクリプトで取得したときにダウンロードされたファイルは 474 バイトで、ファイルの末尾から 1 バイトが欠落しています。(最後のバイトはピリオドで、サーバー上のファイルには存在しますが、この関数を介してダウンロードされたときには存在しません)。これにより、ファイルが無効になります。

バイトが欠落している理由を突き止めようと頭を悩ませていますが、誰か助けてもらえますか?

4

1 に答える 1

3

使用してみてください

Response.TransmitFile(filePath);
HttpContext.Current.ApplicationInstance.CompleteRequest(); 

それ以外の

Response.Close();
Response.End();

または他に言及されているように:

Flush()前に電話するClose()

Response.TransmitFile(filePath);
Response.Flush();
Response.Close();
Response.End();

または、の呼び出しを省略して直接Close()呼び出すとEnd()、応答のフラッシュが含まれます。

Response.TransmitFile(filePath);
Response.End();

Response.End ()に関するスレッドがあり、おそらくそれはあなたにとって有用な情報を含んでいます。

于 2012-07-04T13:33:25.300 に答える