IE 中“下载链接”失败
-
22-09-2019 - |
题
我试图实现一个“下载链接”并将其放在我的一个报告表旁边,以便用户可以下载 csv 文件并使用 Excel 等应用程序打开它。
记录是根据用户的查询动态生成的。
所以我的控制器中的某个地方有这样的东西:
response.headers['Content-Type'] = 'text/csv'
response.headers['Content-Disposition'] = 'attachment; filename=xxx.csv'
return response.stream(dynamically_generated_csv, request=request)
这在 FireFox 和 Chrome 中都有效,但在 IE 中失败。
当我打印出响应标头时,我发现 web2py 在我的响应中添加了几个标头:“Expires”、“Cache-Control”等...
当我通过执行以下操作删除“Cache-Control”标头时:
del response.headers['Cache-Control']
它可以在 IE 中运行。
因此,IE 似乎无法处理“Cache-Control”设置为特定值的可下载文件。
现在,我的问题是:
为什么 web2py 隐式添加这些响应标头?也许没有办法将其引爆?
当我以这种方式删除“Cache-Control”标头时有任何副作用吗?
提前致谢。
解决方案
我不确定正在发送什么缓存控制标头,但 IE 对于下载的文件有一个错误,就像您遇到的那样。
对于 IE,您必须启用缓存. 。当 IE 加载文件时(例如Excel 文件),在 Excel 中,它从缓存目录加载它们,因此,如果您不缓存它,Excel(或您的其他应用程序)将无法加载该文件。
Eric Law (MSFT) 的主题: http://blogs.msdn.com/ieinternals/archive/2009/10/02/Internet-Explorer-cannot-download-over-HTTPS-when-no-cache.aspx
更新:但是,如果您只是想强制下载...例如没有让 IE 在 IE 窗口内加载 excel 文件...然后请务必设置附件的完整标题。
//PHP style
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="downloaded.pdf"');
其他提示
下载链接是否使用 https (ssl)?如果是这样,那么如果设置为缓存,IE 将无法处理下载。这是 IE 的一个已知问题。
这并没有回答你的问题,但我希望能解决原来的问题。
我只需添加时间戳(足够独特的东西)来查询 CSV 文件的链接字符串。这对我有帮助。