IE 10 - 文件下载问题

时间:2013-05-20 18:06:57

标签: asp.net internet-explorer-10

我正在尝试下载一个excel文件(使用C#\ ASP.NET动态生成),当我点击“打开”它显示“abc.xls无法下载”错误时,我得到IE10查看下载对话框但是单击“重试”后,它会在第二次尝试时正确打开.xls文件。

当我在Firefox或Chrome中测试时,它可以正常工作。

2 个答案:

答案 0 :(得分:8)

我认为这可以解释这种奇怪的行为:

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

IE9 beta似乎在下载文件时引入了content-lengthtransfer-encoding验证,但发现它太成问题,因为许多服务器没有为通过代码处理的这些下载发送正确的值。显然他们在IE10中重新开启了它,并且只是希望最好。

我打赌下载开始时发送的准确值应该可以解决这个问题。当然,从ai yi yi开始它应该不是一个问题。

[编辑]

结果显示此问题与代码中使用Response.Close()和/或Response.End()相关(至少对我而言)。 This article 解释了为什么不应该使用这两种方法,以及为什么HttpApplication.CompleteRequest是首选方法。将我们的Response.End()Response.Close()个实例更改为HttpApplication.CompleteRequest解决了我们的IE10下载问题。喜欢魔法。显然MSDN现在不鼓励使用这两种方法(尽管多年的MSDN代码示例包含它们),现在主张使用HttpApplication.CompleteRequest代替。

我们总是与欧亚大陆交战......

[/编辑]

答案 1 :(得分:2)

我得到了类似的行为 - 对这个问题进行了大约12个小时的斗争对我有用:

更改

的响应标头
  

Content-Type:application / application / vnd.ms-excel

  

Content-Type:application / octet-stream

请注意,我有另一个未提及的症状:我正在设置

  

内容 - 处置:附件;文件名= “Inventory_10-10-2013.xls”

尽管设置IE使用了URL中的文件名(因此它说“无法下载getInventory” - 并且它在下载文件夹中保存了错误命名的文件!)。

当我更改'Content-Type'时,IE开始从标题中识别文件名。

这里的记录是我正在设置的所有响应标题:

  • HTTP / 1.1 200确定
  • Pragma:Public
  • 到期日:2013年10月11日星期五16:33:38 GMT
  • 缓存控制:max-age = 1
  • 内容 - 处理:附件;文件名= “Inventory_10-10-2013.xls”
  • Content-Transfer-Encoding:BINARY
  • Set-Cookie:fileDownload = true;路径= /
  • Content-Type:application / octet-stream; charset = UTF-8
  • 内容长度:7680
  • 日期:2013年10月10日星期四16:33:38 GMT