我试图实现一个“下载链接”并将其放在我的一个报告表旁边,以便用户可以下载一个 csv 文件并使用 Excel 等应用程序打开它。
记录是根据用户的查询动态生成的。
所以在我的 Controller 的某个地方有类似的东西:
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 中失败。
当我打印出响应 header 时,我发现 web2py 将几个 header 添加到我的响应中:'Expires'、'Cache-Control' 等...
当我通过执行以下操作删除“Cache-Control” header 时:
del response.headers['Cache-Control']
它在 IE 中工作。
所以 IE 似乎无法处理“缓存控制”设置为特定值的可下载文件。
现在,我的问题是:
为什么 web2py 隐式地添加这些响应 header ?也许没有办法将其关闭?
以这种方式删除“Cache-Control” header 时有任何副作用吗?
提前致谢。
最佳答案
我不确定正在/正在发送什么缓存控制 header ,但 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"');
关于python - "download link "在 IE 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1999950/