一位用户发布了这篇关于如何使用 HttpResponse.Filter 压缩大量数据的文章。但是如果我尝试传输 4G 文件会发生什么?它会将整个文件加载到内存中以进行压缩吗?否则它将逐块压缩它?
我的意思是,我现在正在这样做:
public void GetFile(HttpResponse response)
{
String fileName = "example.iso";
response.ClearHeaders();
response.ClearContent();
response.ContentType = "application/octet-stream";
response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName);
response.AppendHeader("Content-Length", new FileInfo(fileName).Length.ToString());
using (FileStream fs = new FileStream(Path.Combine(HttpContext.Current.Server.MapPath("~/App_Data"), fileName), FileMode.Open))
using (DeflateStream ds = new DeflateStream(fs,CompressionMode.Compress))
{
Byte[] buffer = new Byte[4096];
Int32 readed = 0;
while ((readed = ds.Read(buffer, 0, buffer.Length)) > 0)
{
response.OutputStream.Write(buffer, 0, readed);
response.Flush();
}
}
}
所以在我阅读的同时,我正在压缩和发送它。然后我想知道 HttpResponse.Filter 是否做同样的事情,否则它将把整个文件加载到内存中以压缩它。
另外,我对此有点不安全......也许需要将整个文件加载到内存中以压缩它......是吗?
干杯。