3

ダウンロード リンクをクリックすると、ユーザーにファイルを配信する次のコードがあります。セキュリティ上の理由から、ファイルに直接リンクすることはできないため、これは URL をデコードしてファイルを送信するように設定されています。

しばらくは正常に動作していましたが、最近、ファイルのダウンロードが開始されるという問題が発生し始めましたが、ファイルのサイズがわかりません。

このため、ダウンロードを停止する必要があるときに停止しません。

ファイルは約 99 MB ですが、ダウンロードすると、ブラウザは 100 MB を超えてダウンロードし続けます。何をダウンロードしているのかわかりませんが、キャンセルしないと止まりません。

TransmitFileそれで、私の質問は、適切なタイミングで停止するように、ファイルのサイズも送信されるようにするための代替手段または方法はありますか?

コードは次のとおりです。

string filename = Path.GetFileName(url); 
context.Response.Buffer = true; 
context.Response.Charset = ""; 
context.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
context.Response.ContentType = "application/x-rar-compressed"; 
context.Response.AddHeader("content-disposition", "attachment;filename=" + filename);   
context.Response.TransmitFile(context.Server.MapPath(url));
context.Response.Flush(); 

WriteFileファイルが非常に大きいため、ファイル全体をメモリにロードしたくないため、使用したくありません。

ありがとう。

4

1 に答える 1

2

私は答えを見つけたと思います。

次のコードを追加しましたが、少なくとも私にとっては、正しいファイル サイズが報告され、期待どおりに動作しています。

FileInfo OutFile = new FileInfo(context.Server.MapPath(url));
long filesize = OutFile.Length; 
....
context.Response.AddHeader("Content-Length", filesize.ToString());
于 2009-12-03T03:56:53.793 に答える