使用content-disposition:inline提供的文件有时仍会提示下载。

5
我的主题行已经说了我要问什么。我有一个网站,可以输出各种格式的报告(HTML、CSV、TSV、Excel等)。尽可能地,我希望这些文件在浏览器中显示。为此,我设置了头文件,使“Content-Disposition”为“inline”。然而,对于不同的文件类型,这种方法的效果非常不一致。在FF3和IE7中,HTML总是自动打开。这很合理。如果我使用TSV,两个浏览器都会提示下载,因为它是我的系统上未知的文件类型。这也很合理,正是我想要的。然而,Excel和CSV提供了不同的行为。在FF中,两者总是提示下载或打开。如果我选择“打开”,它会在新窗口中打开。在IE中,两者也会提示下载或打开--我无法弄清楚这个问题。我认为使用Content-Disposition:inline,Excel文件应该会自动以内联方式打开。如果我在IE中选择“打开”,它会在浏览器中内联打开。

有人能解释这种意外的行为吗?这对我来说并不是一个问题,但我的用户认为这是一个错误,所以我需要一个权威的来源来引用给他们看。到目前为止,我发现关于这个“问题”的唯一一件事是一个mozilla论坛上的1行帖子,说自动打开内联的事情是IE的一个安全漏洞...那是一个旧帖子,也许在IE7中已经“修复”了?谢谢。

2个回答

3
您可能已经解决了这个问题,但如果没有,我可以给出一个答案(对于未来遇到同样问题的人也适用,这个问题让我很抓狂!)
这种行为可以在客户端上使用以下方法进行覆盖:
  1. 打开Windows资源管理器
  2. 选择“工具” ->“文件夹选项”
  3. 选择“文件类型”选项卡
  4. 找到“DOC”(或“PDF”等)扩展名
  5. 选择“高级”
  6. 根据需要勾选/取消勾选“下载后确认打开”。
实现预览/下载功能的机制是通过使用“内容-描述”头部字段实现的,通常使用MimeType“应用程序/”。这基本上告诉本地客户端使用指定的应用程序打开应用程序,然而上述应用程序的设置可以覆盖所请求的交付格式。

0

检查您的服务器是否为CSV和Excel文件提供了正确的MIME类型。为了正确处理它们,即使是识别其类型并具有文件类型处理程序/插件的浏览器也需要正确的MIME类型。

您可能希望两者的MIME类型都是application/vnd.ms-excel

如果您正在使用Web服务器作为常规文件提供这些文件,则Apache中相关的设置是mime.types文件。

application/vnd.ms-excel xls csv

如果您从应用程序中提供这些文件,则需要自己添加Content-Type: application/vnd.ms-excel头信息。
请注意,对于某些用户,您可能永远无法按预期工作 - 例如没有安装Microsoft Office的任何人,甚至使用替代浏览器或已更改其文件类型关联的任何人。
(有趣的是,this article描述了该过程 - 它恰好能够Plone / Zope,但思想是相同的)。

谢谢您的回复,但我认为它并没有对我有太大帮助...内容类型已经被正确设置了。我使用text/csv作为CSV的内容类型,符合RFC4180的规定。我在使用MS Office和Open Office的电脑上得到了相同的行为,只是后者从不在浏览器中内联打开。顺便说一下,我正在使用IIS。 - rmeador

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接