2012-03-07 16 views
6

とInternet Explorerで「ファイルをダウンロードすることができませんでした」 IE9、バージョン9.0.8112.16421を使用して)、「ファイルをダウンロードできませんでした」と表示され、ユーザーには「再試行」ボタンが表示されます。 [再試行]をクリックすると正常に動作します。 [保存]をクリックすると正常に動作します。 Firefoxでは、うまく動作します。だから私はこのようなアクションから<code>FileContentResult</code>を返すよASP.NET MVC

初めて開くときにユーザーがファイルを開くことを許可するにはどうすればよいですか?

+0

すなわちのバージョンは? – Joe

+0

私は質問を更新しました。 –

+0

最初のリクエストを行ったときにフィドラーをインストールして実行してください。サーバーから戻ってくる応答を調べることができます。多分、それはこの問題についていくらか光を当てるでしょう。 http://www.fiddler2.com/fiddler2/ – Joe

答えて

2

私は、URLを変更することによってIEが正しいことをすることを "騙す"ことができました。それは一種のハッキーですが、ここにその詳細があります。 HTH。

良いMVCコーダーとして、私は自分のコントローラのアクションに対して私のビューで右のリンクを生成するためにUrl.Action()を使用しました。結果は "/ Subscription/DownloadArchive"でしたが、同じ問題がありました。 (私はZIPファイルをストリーミングしていますが、あなたのCSVと変わりはありません)。ちょうど今、あなたの投稿を読んだあと、URLを "/Subscription/DownloadArchive/Archive.zip"にハードコーディングしました。コードで "Archive.zip"を無視しますが、実際はコントローラの動作から返されるファイル名です。

Presto!

0

私は同じ問題がありましたが、Visual Studio Development Serverのポート番号を別のものに変更した場合、この問題は解決しませんでした。

2

私は同じ問題を抱えていると(オプションですToodを示唆するもののほか、)良い解決策を提供することはできません。しかし、フィドラー& co。と状況を見て、私は助けになるかもしれないいくつかのより多くの情報があります。

私たちのアプリケーションは、その場でPDF文書を作成し、ダウンロードとして提供しています。この問題は明らかにデータに依存しています。つまり、一部の生成されたファイルは最初の試行で正常にダウンロードされ、他の人は再現性のある再試行が必要です。

Fiddlerは、私が知る限り、各アクセスで同一のサーバー応答を示しています。要求は、(サンプルはわずかに編集)しかしながら、異なる:

最初の要求:

GET http://localhost:12345/Item/PDF/id HTTP/1.1 
Accept: text/html, application/xhtml+xml, */* 
Referer: ... 
Accept-Language: ... 
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0) 
Accept-Encoding: gzip, deflate 
Host: localhost:12345 
Connection: Keep-Alive 
Cookie: ASP.NET_SessionId=52znkt1fcisrolj44tnuyzu4 

第2の要求:わずかにヘッダ:第2の要求が '承諾' を減少させる方法

GET http://localhost:12345/Item/PDF/id HTTP/1.1 
Accept: */* 
Accept-Encoding: gzip, deflate 
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0) 
Host: localhost:12345 
Connection: Keep-Alive 
Cookie: ASP.NET_SessionId=52znkt1fcisrolj44tnuyzu4 

注、 */*。私がファイル拡張子をURLに追加することを嫌っているのは、提案されたダウンロード名が、アイテムデータから生成され、レスポンスと共に提出され、そうでなければIDと完全に無関係であるためです。

+0

これは非常に興味深いです。私はこれに戻り、もう一度見直さなければならない。 –

+0

私はIE 11で同じ問題に遭遇しました。私は同じ結果をFiddlerに見ます。私のプロセスは、ローカルシステムからテキストファイルを開いて編集したり、最初から作成することでした。私が思いつくことができる最善の回避策は、 'filename.timestamp.txt'のようなファイル名にタイムスタンプを追加することでした。 – JabberwockyDecompiler

0

この作品..

Response.Clear(); 
Response.ClearHeaders(); 
Response.ClearContent(); 
Server.ScriptTimeout = 3000; 
Response.AppendHeader("Content-Disposition:", "attachment; filename=" + fileName); 
Response.ContentType = "application/x-msdownload"; 
excelFile.SaveXls(Response.OutputStream); 
Response.Flush(); 
HttpContext.Current.ApplicationInstance.CompleteRequest(); 
// Response.Close(); 
Response.End(); 
関連する問題