1

ASP.NET アプリケーションで非常に奇妙な問題に直面しています。

ユーザーがファイルをダウンロードするボタンをクリックすると、Internet Explorer / Chrome / Firefox は保存ダイアログを表示しますが、ファイルの名前は ASPX ページの名前です(たとえば、ページの名前が Download.aspx の場合、ダウンロード ダイアログに「ファイル」Download.zip)。MIME タイプで遊んでいると、ダウンロード ダイアログに "Download.aspx" と表示されることがあります。ページをダウンロードしようとしているようですが、実際には正しいファイルです。

これは ZIP 拡張子で発生し、これが私のコードです (かなり標準的だと思います):


        this.Response.Clear();
        this.Response.ClearHeaders();
        this.Response.ClearContent();
        this.Response.AddHeader("Content–Disposition", "attachment; filename=" + file.Name);
        this.Response.AddHeader("Content-Length", file.Length.ToString());
        this.Response.ContentType = GETCONTENTYPE(System.IO.Path.GetExtension(file.Name));
        this.Response.TransmitFile(file.FullName);
        this.Response.End();

GetContentType 関数は、ファイルの MIME を返すだけです。application/x-zip-compressedmultipart/x-zip、そしてもちろんapplication/zipで試しました。application/zip を使用すると、Internet Explorer 8 で XML エラーが表示されます。

どんな助けでも大歓迎です。

ご挨拶、

4

3 に答える 3

2

同様のメカニズムを処理するために私が行ったことを見ています。これが私が行っている手順です(太字の項目が唯一の本当の違いのようです):

Response.Clear();
Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", fileName));
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; // Excel 2007 format
// ... doing work...
Response.AddHeader("Content-Length", outputFileInfo.Length.ToString());
Response.TransmitFile(outputFileInfo.ToString());
HttpContext.Current.Response.End(); // <--This seems to be the only major difference

this.Response と HttpContext.Current.Response は同じはずですが、何らかの理由でそうでない場合があります。

于 2009-10-06T15:05:20.533 に答える
1

Response.Redirect(ResolveUrl(file.FullName))の代わりのようなResponse.TransmitFile(file.FullName)ものはあなたが意図したものだと思います。現在のリクエストへの応答としてファイルを送信するだけでなく、実際にブラウザがファイルを指すようにしたいようです。

編集:このSOの質問も参照してくださいサーバーファイルを取得してダウンロードする方法 (File.Exists and URL)

更新: あなたのフィードバックに基づいて、これがあなたが探しているものだと思います

于 2009-10-06T15:04:35.103 に答える
0

Excel エクスポートの場合

   Response.AddHeader("content-disposition", string.Format("attachment; filename={0}.xls", fileName));

IEとFirefoxでうまくいきました。

于 2012-10-31T17:31:31.250 に答える