为Excel文档设置MIME类型。

429

MS Excel有以下观察到的MIME类型:

  • application/vnd.ms-excel (官方)
  • application/msexcel
  • application/x-msexcel
  • application/x-ms-excel
  • application/x-excel
  • application/x-dos_ms_excel
  • application/xls
  • application/x-xls
  • application/vnd.openxmlformats-officedocument.spreadsheetml.sheet(xlsx)

是否有一种类型适用于所有版本?如果没有,我们需要单独设置response.setContentType()吗?

此外,在我们的应用程序中使用文件流来显示文档(不仅限于Excel - 任何类型的文档),如果用户选择保存文件,如何保留文件名?当前,呈现文件的Servlet的名称出现为默认名称。


6
更一般地说,找出微软自己认为正确的类型的最佳方法是找到安装了最新版本的框,并查看注册表中 HKCR/.xlsContent Type 值。 - Rup
4
"application/vnd.ms-office"是XLS文件的另一种MIME类型。 - herrjeh42
application/vnd-xls 也适用于 .xls 文件。 - mbomb007
1
请参考帖子,获取完整的MIME类型列表和相关的Excel文件扩展名。 - RBT
2
标准的Excel MIME类型是:application/vnd.ms-excel。 - Raksha Saini
6个回答

400

我认为Excel文件的标准MIME类型application/vnd.ms-excel

关于文档名称,您应在响应中设置以下标题:

header('Content-Disposition: attachment; filename="name_of_excel_file.xls"');

23
"application/msexcel" 和 "application/vnd.ms-excel" 有何不同? - Thabiso Mofokeng
7
如果你想在浏览器中显示文档(如果支持的话),那么 Content-Disposition 需要设置为“inline”。请参见 https://dev59.com/yHM_5IYBdhLWcg3wZSPX。 - flash
4
在HTTP中应避免使用Content-Disposition,因为它存在安全问题。Content-Disposition仅适用于电子邮件。更多信息请参见https://dev59.com/ZnNA5IYBdhLWcg3wUMDn。 - Dzmitry Lazerka
请注意,对于OpenXML Excel XLSX文件格式,定义了不同的Mime类型,请参见提供的链接中的完整列表。 - Oskar Berggren
@Kip 不仅是坏字符,而且还有JavaScript,在那个问题的评论中有一个关于内容协商攻击的链接。 - Dzmitry Lazerka
显示剩余2条评论

217

看到这里又重新开启了一个旧线程,但我想补充一下“新”的 .xlsx 格式。

根据http://filext.com/file-extension/XLSX显示,.xlsx 的扩展名为application/vnd.openxmlformats-officedocument.spreadsheetml.sheet。在检查MIME类型时包含它可能是个好主意!


3
这正是我在寻找的,谢谢。需要支持最新的格式以及之前的格式。 - Lee

64

使用以下content-type来处理.xls文件

application/vnd.ms-excel

适用于 Excel 2007 及以上版本的.xlsx文件格式

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

9
我正在使用以下代码从.NET代码中设置MIME类型 -
File(generatedFileName, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")

我的应用程序使用OpenXML SDK生成Excel文件。这个MIME类型可行 -
vnd.openxmlformats-officedocument.spreadsheetml.sheet

2
我正在使用EPPlus生成 .xlsx(基于OpenXML格式)的Excel文件。为了将此Excel文件作为附件发送到电子邮件中,我使用以下MIME类型,并且它可以与由EPPlus生成的文件一起正常工作,在ms-outlook邮件客户端预览中正确打开。
string mimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
System.Net.Mime.ContentType contentType = null;
if (mimeType?.Length > 0)
{
    contentType = new System.Net.Mime.ContentType(mimeType);
}

1

对于那些在使用问题中列出的所有可能的MIME类型后仍然遇到困难的人:

我发现iMac倾向于为XLS Excel文件抛出"text/xls" MIME类型,希望这可以帮助。


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