6

我试图实现一个“下载链接”并将其放在我的一个报告表旁边,以便用户可以下载 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”标头时是否有任何副作用?

提前致谢。

4

3 回答 3

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"');
于 2010-01-04T15:10:03.340 回答
2

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

于 2010-01-04T15:04:32.443 回答
0

这并不能回答您的问题,但我希望可以解决原始问题。

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

于 2010-01-04T14:56:07.580 回答