我正在尝试下载一个excel文件(使用C#\ ASP.NET动态生成),当我点击“打开”它显示“abc.xls无法下载”错误时,我得到IE10查看下载对话框但是单击“重试”后,它会在第二次尝试时正确打开.xls文件。
当我在Firefox或Chrome中测试时,它可以正常工作。
答案 0 :(得分:8)
我认为这可以解释这种奇怪的行为:
"Content-Length and Transfer-Encoding Validation in the IE10 Download Manager"
IE9 beta似乎在下载文件时引入了content-length
和transfer-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开始从标题中识别文件名。
这里的记录是我正在设置的所有响应标题: