我在服务器上有一个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();
}
Run Code Online (Sandbox Code Playgroud)
TransmitFile - 将指定文件直接写入HTTP响应输出流,而不在内存中缓冲它.
WriteFile - 将指定文件直接写入HTTP响应输出流.
我会说发生差异是因为传输文件没有缓冲它.写文件使用缓冲(Afiak),基本上是在传输数据之前暂时保存数据,因此无法猜测准确的文件大小,因为它以块的形式写入.