【问题标题】:MIME-Type for Excel XML (ASP.NET 3.5)Excel XML 的 MIME 类型 (ASP.NET 3.5)
【发布时间】:2011-12-31 06:14:13
【问题描述】:

我使用 CarlosAG-Dll 为我创建一个 XML-Excel 文件(在 MemoryStream 中)。

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 类型(但是哪一种?)。


编辑:我发现了一个错误描述here

我想知道这是否仍然开放,为什么?

【问题讨论】:

    标签: c# asp.net excel mime-types


    【解决方案1】:

    这样使用

    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 File Format MIME Types

    编辑:

    如果内容不是原生 Excel 文件格式,而是 基于文本的格式(例如 CSV、TXT、XML),然后网站可以添加 下面的 HTTP 标头到他们的 GET 响应告诉 IE 使用 备用名称,并在名称中您可以将扩展名设置为右侧 内容类型:

    Response.AddHeader "Content-Disposition", "Attachment;Filename=myfile.csv"
    

    更多详情请见this link

    【讨论】:

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

    如果您的文档是 Excel Xml 2003 文档,您应该使用 text/xml 内容类型。

    Response.ContentType = "text/xml";
    

    不要指定内容处置。

    此技术适用于 Handler,而不适用于 WebForm。

    【讨论】:

      【解决方案3】:

      安全警告与 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

      【讨论】:

      • 如果我没记错的话,生成的文件格式不是 Excel 2007,而是 Excel 2003 引入的 XML 格式。所以文件扩展名 .xlsx 不正确,Excel 可能甚至无法打开它带有该文件扩展名。
      • @Codo 谢谢-您所指的 IIRC 格式是在 Excel 2000 中引入的-相应地编辑了答案...
      • 我也尝试将 .xls 作为扩展名,但随后出现相同的错误(我尝试打开 .xls 但此扩展名与内容不同 [即 xml])@Codo:是的,这就是我在我最初的帖子中写道(至少我尝试过;-))
      猜你喜欢
      • 2012-10-18
      • 1970-01-01
      • 2013-06-04
      • 2013-08-13
      • 2014-09-07
      • 2013-04-21
      • 2010-11-01
      相关资源
      最近更新 更多