8

サーバー上に 5Mb の pdf があり、writeFile を使用してこのファイルをダウンロードすると、15Mb のダウンロードが得られますが、transmitfile では正しい 5Mb のファイルサイズが得られます...

これは、サーバー上の writeFile のメモリへのある種の圧縮解除によるものですか? 誰かが同じことが起こっているのを見たのだろうか...

(ps は、iis7 に移行してから気付いただけでしょうか??)

コードは...

if (File.Exists(filepath))
{
    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.ContentType = "application/octet-stream";
    HttpContext.Current.Response.AddHeader("content-disposition","attachment;filename=\""+Path.GetFileName(filepath)+"\"");
    HttpContext.Current.Response.AddHeader("content-length", new FileInfo(filepath).Length.ToString());

    //HttpContext.Current.Response.WriteFile(filepath);
    HttpContext.Current.Response.TransmitFile(filepath);

    HttpContext.Current.Response.Flush();
    HttpContext.Current.Response.Close();
}
4

2 に答える 2

7

TransmitFile-指定されたファイルを、メモリにバッファリングせずにHTTP応答出力ストリームに直接書き込みます。

WriteFile-指定されたファイルをHTTP応答出力ストリームに直接書き込みます。

送信ファイルがバッファリングしないため、違いが生じると思います。書き込みファイルはバッファリング(Afiak)を使用しており、基本的にデータを送信する前に一時的に保持します。そのため、データをチャンクで書き込むため、正確なファイルサイズを推測できません。

于 2010-01-21T16:28:01.863 に答える