2013-05-20 80 views
4

我試圖下載一個excel文件(使用C#\ ASP.NET動態生成),當我點擊「打開」它時,我得到IE10查看下載對話框「abc.xls couldn' t下載「錯誤,但點擊」重試「後,它會在第二次嘗試中正確打開.xls文件。IE 10 - 文件下載問題

當我在Firefox或Chrome中測試它時,它工作正常。

+0

你能分享你的代碼嗎?這將有助於確定您的問題。 –

回答

8

我想,這也許可以解釋的奇怪現象:

"Content-Length and Transfer-Encoding Validation in the IE10 Download Manager"

看來,下載文件時,IE9的測試版已經推出content-lengthtransfer-encoding驗證,但發現它太有問題的,因爲許多服務器沒有發通過代碼處理這些下載的適當值。顯然,他們在IE10中將其重新啓用,但只是希望最好。

我打賭下載開始時發送準確的值應該清除這個問題。當然,從...開始,這應該不成問題。

[編輯]

原來這個問題涉及(至少對我來說)在代碼使用Response.Close()和/或Response.End()This article解釋了爲什麼你不應該使用這兩種方法,爲什麼HttpApplication.CompleteRequest是選擇的方法。將我們的Response.End()Response.Close()實例更改爲HttpApplication.CompleteRequest解決了我們的IE10下載問題。像魔術一樣。顯然,MSDN現在不鼓勵使用這兩種方法(儘管多年的MSDN代碼示例包含它們),現在主張使用HttpApplication.CompleteRequest代替。

我們總是在與歐亞大陸的戰爭......

[/編輯]

+2

我只想添加一件重要的事情要注意。 我在使用IE10下載動態生成的文件(CSV,XLS)時遇到同樣的問題。 我要叫'HttpApplication.CompleteRequest()'** **前調用到Response.End'()'。否則,來自ASPX頁面的HTML標記仍會附加到我下載的文件中。 – stun

2

我得到了類似的行爲 - 約12小時,什麼工作對我來說打擊這一問題後:

內容類型改變響應報頭:應用/應用/ vnd.ms-的excel

內容類型:應用程序/八位字節流

請注意,我有另外一個未提及的症狀:我設置

內容處置:附件;文件名=「Inventory_10-10-2013.xls」

儘管IE的設置從URL中使用的文件名(這樣說:「getInventory無法下載」 - 它在保存了錯誤命名文件下載文件夾!)。

當我改變了「內容類型」,即開始從頭部履行的文件名。

對於這裏的記錄都是我設置的響應頭:

  • HTTP/1.1 200 OK
  • 附註:公共
  • 過期:週五,2013年10月11日16:33: 38 GMT
  • 緩存控制:最大年齡= 1
  • 內容處置:附件; filename =「Inventory_10-10-2013.xls」
  • Content-Transfer-Encoding:BINARY
  • Set-Cookie:fileDownload = true;路徑=/
  • 內容類型:應用/八位字節流;字符集= UTF-8
  • 內容長度:7680
  • 日期:星期四,2013年10月10日16點33分38秒GMT