ユーザーは、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が同じことを行うかどうかを知りたいです。そうでない場合は、ファイル全体をメモリにロードして圧縮します。
また、私はこれについて少し不安です...多分それを圧縮するためにメモリにファイル全体をロードするために必要です...そうですか?
乾杯。