Excel XML的MIME类型(ASP.NET 3.5)

10

我使用CarlosAG-Dll,它为我创建一个XML-Excel文件(在内存流中)。

Response.ContentType = "application/vnd.ms-excel";
Response.AppendHeader("content-disposition", "myfile.xml");
memory.WriteTo(Response.OutputStream);

我的问题在于,客户端会得到一个 myfile.xls(IE)或 myfile.xml.xls(FF),因此会从 Excel 获取一个烦人的安全警告。

我尝试过使用 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet(xlsx),但它甚至无法打开。

因此,我需要删除 .xml 并将其发送为 vnd.ms-excel(如何?),或者选择另一种 MIME 类型(但是哪种呢?)。


编辑:我在这里找到了一个错误描述。

我想知道这个问题是否仍然存在,以及为什么?

3个回答

14

使用方法如下

Response.ContentType = "application/vnd.ms-excel";

Response.AppendHeader("content-disposition", "attachment; filename=myfile.xls");

对于Excel 2007及以上版本,MIME类型有所不同。

Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

Response.AppendHeader("content-disposition", "attachment; filename=myfile.xlsx");

查看MIME类型列表

Office 2007文件格式MIME类型

编辑:

如果内容不是本地的Excel文件格式,而是文本格式(例如CSV、TXT、XML),那么网站可以在GET响应中添加以下HTTP头来告诉IE使用替代名称,在名称中,您可以将扩展名设置为正确的内容类型:

Response.AddHeader "Content-Disposition", "Attachment;Filename=myfile.csv"
更多详情请查看此链接

我确实知道这些MIME类型,但它们中没有一个符合我的要求(带有扩展名.xml的excel-xml文件)。 - UNeverNo
请查看答案的编辑部分,其中包含了解决您问题的方法。 - Prasanth
我在我的测试中添加了“附件”,现在我的客户希望在单击打开后使用我的标准xml应用程序(可以是其他地方没有),它会在Excel中打开(但仅在IE中)。如果我在FF中这样做,它仍然会转换为.xml.xls。 - UNeverNo
@UNeverNo 请看链接的最后一部分:“如果文件不是正确的MIME类型,则用户可能会看到第二个提示,因此必须再次按“否”取消第二次打开尝试。仅在使用IE作为您的Web浏览器时才会出现此问题。该问题仍在调查中,但考虑到代码的复杂性以及Excel不希望降低安全措施以解决IE打开行为而没有完全了解其他浏览器用户的后果,修复不太可能在Office 14之前实现。” :) - Prasanth
谢谢你的帮助,我想我现在会暂时忍受这个警告信息... - UNeverNo

1
如果您的文档是Excel Xml 2003文档,则应使用text/xml内容类型。
Response.ContentType = "text/xml";

不要指定内容分发。
这种技术在处理程序中效果很好,但在WebForm中不起作用。

0

安全警告与 MIME 类型无关 - 这是客户端安全设置,无法从服务器端禁用!

另一个要点 - 将 Response.AppendHeader("content-disposition", "myfile.xml"); 更改为:

Response.AppendHeader("content-disposition", "attachment; filename=myfile.xlsx");

或者

Response.AppendHeader("content-disposition", "inline; filename=myfile.xlsx");

请参阅http://www.ietf.org/rfc/rfc2183.txt以供参考

编辑-根据评论:

如果格式不是XLSX(Excel 2007及以上版本),则在上述代码中使用myfile.xls


1
如果我没记错的话,生成的文件格式不是Excel 2007,而是在Excel 2003中引入的一种XML格式。因此,文件扩展名.xlsx是不正确的,Excel可能甚至无法使用该文件扩展名打开它。 - Codo
@Codo 谢谢 - 如果我没记错,你所提到的格式是在 Excel 2000 中引入的 - 我已相应地编辑了答案... - Yahia
我也尝试使用 .xls 作为扩展名,但是我得到了相同的错误(我尝试打开 .xls,但是这个扩展名与内容不同[内容是 xml])。@Codo:是的,这就是我在我的初始帖子中写的(至少我尝试过;-))。 - UNeverNo

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