IE中的“下载链接”失败

时间:2010-01-04 14:45:18

标签: python internet-explorer web2py

我正在尝试实施“下载链接”并将其放在我的某个报告表旁边,以便用户可以下载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'标题时有任何副作用吗?

提前致谢。

3 个答案:

答案 0 :(得分:5)

我不确定正在发送哪些缓存控制标头,但是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"');

答案 1 :(得分:2)

下载链接是否使用https(ssl)?如果是这样,那么如果将IE设置为缓存,则IE无法处理下载。这是IE的已知问题。

答案 2 :(得分:0)

这不能回答你的问题,但我希望解决原始问题。

我只想添加时间戳(足够独特的东西)来查询CSV文件的链接字符串。这对我有帮助。