2009-08-13 8 views
7

私はリンクボタンを持つaspxページを持っています。ユーザーはダウンロードするためにブラウザにファイルをストリームするために新しいaspxページを開くためにjavascriptを起動します。IE 7のバグ? - ファイルのダウンロード時にプロンプ​​トセーブ/オープン - C#asp.net 3.5

XP-SP3、IE 7、およびFireFox 3.5の開発とユニットテストでは、次のコード(Content-Dispositionタグのキーが「添付ファイル」部分)を使用して、保存するかどうかを尋ねるダイアログボックスが表示されます私は、Windows 2003サーバーにこれを導入し、同じaspxページに移動すると予想されるように

 private void WriteFileToBrowser(Byte[] requestFile, string filename, String m_mimeType, String m_format) 
    { 
     Response.Clear(); 
     Response.AddHeader("Content-Disposition", "attachment;filename=" + filename + "." + m_format); 
     Response.ContentType = m_mimeType; 
     Response.BinaryWrite(requestFile); 
     Response.Flush(); 

    } 

、FireFoxの3.5が正しく保存/オープンオプションを要求:または私は起こるしたい正確に何である文書を開きますこれはFFのデフォルトの操作なので

しかしIE 7でナビゲートしてダウンロードすると、1/8秒の上に表示されるポップアップウィンドウが表示され、消えます。保存/開くプロンプトは表示されません。

私はIE 7に行けば - > [ツール] - > [インターネットオプション] - > [セキュリティ] - > [レベルのカスタマイズ - ファイルのダウンロードを促す>ダウンロード

自動無効になっています。私がそれを有効にするためにチェックすると、Save/Openプロンプトが正しく動作するようになります。

私の質問は.....だれでもこれに対処していますか?私は、人々がキャッシュ、プラグマなどのような異なるヘッダータグで作業を要求しているものをたくさん試しました...そのどれも、IEがデフォルトで無効になっているダウンロードプロパティを持っているという事実を回避しません。

+0

私は似たようなことを試してみましたが、IE7,8で動作します。使用しているm_mimeTypeの正確な値を指定できますか? –

+0

これをmimeとして使用してテストするためのパラメータリストのフォーマット "application/pdf"、 "PDF" –

+0

アプリケーション/ zip IE7がウィンドウ内に表示できないもの。 –

答えて

2

カスタムWebフレームワークで生成されたレポートをダウンロードするための実装では、最近同じ問題が発生しました。研究は、あなたが述べたのと同じアプローチ(Content-Dispositionの設定)を試みるように導いてくれました。

問題はIE7とセキュリティゾーンに関連しています。デフォルトでは、特定のアクションは明示的にユーザーによって開始されなければなりません。 Understanding and Working in Protected Mode Internet ExplorerAbout Window Restrictions

0

この問題とは関係ありませんが、出力にファイル名を引用する必要があります。ファイル名のスペースは、ファイルをダウンロードするときにファイル名を壊してしまいます。

0
Response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "." + m_format +"\""); 

試しこの

保護ボイドのButton1 Click(オブジェクト送信者、のEventArgs電子) {Response.ContentTypeの= "アプリケーション/ PDF"。 Response.Clear(); Response.TransmitFile( "test.pdf"); Response.End(); }

+0

私の例では、ファイルシステムからのものではなく、BinaryWrite()を使ってブラウザに書き込むバイト配列です。私がシステム上でファイルを物理的にアセンブルしない限り、TransmitFile()はこの場合動作しません。 –

1

信頼できるサイトにページを追加すると、ファイルをダウンロードできます。 実行しているすべてのサイトの開発はこのゾーンにあります。

あなたはあなたの要求の最後に

HttpContext.Current.ApplicationInstance.CompleteRequest(); 

を追加することで、インターネットエクスプローラを強制しようとすることができます。

これ以外の場合は、ドキュメントへのリンクを投稿しようとする可能性があります。そのため、ブラウザはリクエストをユーザー対話の応答として認識します。

0

javascriptを使用して新しいページを開く必要がない場合は、aspxページにResponse.Redirect()を使用できます。保存/開くダイアログが開きます。

関連する問題