4

Response.TransmitFile を使用して、ある時点でユーザーにファイルを送信する ASP.NET アプリを開発しています。

私の開発マシンでは問題なく動作し、テスト サーバーにデプロイすると、そのうちの 2 台で引き続き動作します。サーバーの 1 つ (W2K3) では Firefox でのみ動作しますが、IE7 で試してみると、「Internet Explorer は (サーバー名) でファイル sendfile.aspx を開けません」のようなエラーが表示されます。

問題を再現するために小さなインライン aspx ページを作成しました。

<%@ Page Language="C#" %>
<html><head>
<script language="CS" runat="server">
    void Page_Load(object sender, System.EventArgs e) 
    {
        string filePath = @"C:\temp\export.zip";
        Response.ClearHeaders();
        Response.ContentType = "application/zip";
        Response.Clear();
        Response.AppendHeader("Content-disposition", "attachment; filename=export.zip");
        Response.TransmitFile(filePath);
        Response.End();
    }
</script>
</head></html>

私はさまざまなことを試しましたが、行をコメントアウトすると再び機能することに気付きましたResponse.End(ただし、少なくともウェブで見つけたすべてのサンプルコードによると、この行はそこにあるはずです)

関連する場合と関連しない場合があることに気付いた別の問題は、<html>, <head>とその終了タグを削除すると失敗することです。

私はこれについてしばらく頭を悩ませてきましたが、これを機能させる方法を知っている人はいますか?

4

3 に答える 3

1

Response.End(); を使用しないでください。

試す

Response.TransmitFile(filePath);
Response.End();

実際、.NET 2.0 以降では、

Response.TransmitFile(filePath);
context.HttpApplication.CompleteRequest();
于 2012-06-28T16:07:33.053 に答える
0

OP に役立つには明らかに少し遅れていますが、ZIP ファイルには MIME タイプと IIS 圧縮に問題があるようです。SharpLibZip の wiki を参照してください。

https://github.com/icsharpcode/SharpZipLib/wiki/Zip-Samples#wiki-anchorMemory

Response.ContentType = "application/zip" ' ブラウザが破損した zip ファイルを受信して​​いる場合、IIS 圧縮がこの問題を引き起こす可能性があります。一部のメンバーは、' Response.ContentType = "application/octet-stream" がこれを解決したことを発見しました。Internet Explorer 固有の可能性があります。

これはおそらく、バイナリ/オクテットを使用する必要がある理由を説明しています。

于 2013-02-08T16:23:35.300 に答える
0

(まだ) コメントを追加できないので、ここに小さなメモがあります。

そのメソッドはスレッドを終了し、その時点以降は何も実行されないため、Response.End()に注意してください。TransmitFile( ) の後にResponse.Flush()を実行して、すべてがクライアントに送信されるようにすることができます。

Response.End() の詳細については、この質問を参照してください。

于 2011-04-14T15:47:06.400 に答える