我应该使用哪种MIME类型来处理CSV文件?

606
我看到过使用application/csvtext/csv两种MIME类型。

这两者有什么区别吗?只要请求匹配到可用的类型,那么它们是否具有相同的可替换性?

5
对于那些对媒体类型存在疑虑的人,我在这里提供来自IANA的文档,其中提供了已注册的媒体类型列表: https://www.iana.org/assignments/media-types/media-types.xhtml - ivanleoncz
5个回答

790

RFC 7111

有一份覆盖此问题的RFC文档,建议使用text/csv

该RFC更新了RFC 4180。


Excel

最近我发现了一个明确的Excel应用程序mimetype:application/vnd.ms-excel。它在'96年被注册到IANA。请注意,存在的顾虑是“处于发送者的控制之下”和“可能会遭受违规操作”的问题。

媒体类型: application/vnd.ms-excel

名称Microsoft Excel (tm)

必需参数: None

可选参数: name

编码考虑: 首选base64

安全注意事项: 与大多数应用程序类型一样,这种数据是希望由接收方系统中了解数据的程序进行解释的。接收方需要意识到他们处于发送方的“控制”之下,当接收到这种数据时,因为数据会在他们的系统上执行,并且他们的机器的安全性可能会受到侵犯。

OID { org-id ms-files(4) ms-excel (3) }

对象类型 spreadsheet

评论 这个Media Type/OID用于一般标识Microsoft Excel,不考虑版本、子类型或平台格式。

我不知道供应商扩展是允许的。查看这个答案了解更多信息——感谢starbeamrainbowlabs提供的参考。


57
CSV是一种文本文件格式,Excel与之有什么关系呢?或者我有什么地方理解错误吗? - JimmyPena
34
程序打开文件类型与该文件类型相关的 MIME 类型没有任何关系。 - Pablo Pazos
11
我已在Windows计算机上安装了Excel软件,使用Notepad ++创建CSV文件时,将自动分配 MIME 类型为 application/vnd.ms-excel。你可以亲自尝试一下,并检查你的MIME类型,链接为http://mime.ritey.com/。 - pjd
28
Notepad++ 不会“分配”任何 MIME 类型,您使用的服务会进行分配。 - Pablo Pazos
8
这不是关于被伤害了,而是实际上有80%的答案离题了。 - Stijn de Witt
显示剩余16条评论

122

根据 RFC 4180,您应该使用"text/csv"。


1
“text/csv”是否也接受“.txt”文件?我正在服务器端应用验证,只接受“.csv”文件类型。但是“.txt”文件也被接受了。请确认一下。 - Sukanya Pai
1
抱歉,我到目前为止还没有看到你的问题。RFC 4180确保扩展名应该是.csv。尽管如此,你可能知道,这不是一个严格的要求。你可以打破RFC 4180的实现,但个人而言,我不会这样做,因为它会影响应用程序的可读性。 - Smokefoot
使用Excel编辑的文件将显示为“application/vnd.ms-excel”。 - Kevin Van Ryckegem

59

使用MS Excel时出现异常行为: 如果我将其导出为“基于文本的逗号分隔格式(csv)”,则在上传到我的Web服务器后,我得到的是这个MIME类型:

[name] => data.csv
[type] => application/vnd.ms-excel

微软似乎再次按照自己的方式进行,而不考虑现有标准:https://zh.wikipedia.org/wiki/逗号分隔值


6
Web客户端发送的MIME类型通常只是一个指南,你不能完全信任它。我建议您对其进行进一步验证。 - Chris Seufert
7
这是由于Web服务器的配置将文件扩展名映射到MIME类型。微软的IIS应该使用服务器注册表来完成这项任务,而如果Excel已安装在Web服务器上,则其将填充此注册表。 - Andrew Russell
5
考虑到 "现有标准" 在制定 2005 年的 RFC 4180 中定义 CSV 时忽略了已经在使用的内容,因此责怪微软没有跳入未来来了解标准机构的决定,并在他们最早编写 Excel 的时候使用这些标准是荒谬的。请问您正在安装哪个版本的 Excel? - Robert McKee
1
除了其他所有问题之外,Excel还会损坏CSV文件中的字段值。 - Ronnie Overby
也许吧,这取决于“上传后”实际指的是什么。 - Jasen

59

我的用户可以上传CSV文件,但是现在尚未显示text/csvapplication/csv。这些是通过finfo()识别出来的:

text/plain
text/x-csv

这些是通过浏览器传输的内容:

text/plain
application/vnd.ms-excel
text/x-csv
以下类型未出现,但是可能会出现:
application/csv
application/x-csv
text/csv
text/comma-separated-values
text/x-comma-separated-values
text/tab-separated-values

3
浏览器在上传文件时会猜测要发送的MIME类型。您可以拒绝与之无关的文件,但仔细检查文件的实际内容是确定已上传内容的唯一方法。 - Tetsujin no Oni
"text/tab-separated-values" 在技术上并不是 CSV 文件;或者你的意思是说,即使是逗号分隔的数据,你也可以得到它吗? - Arthur
1
@Arthur 可以随意使用额外的 TSV 文件类别。我忽略了其他术语,因为许多程序创建的文件都使用 .csv 扩展名,无论使用哪个分隔符,而 PHP 作为最常用的服务器端语言,也仅在其函数中使用 CSV 术语。将其称为“字符分隔文件”,你就没问题了 ;) - mgutt

17

如果有人在处理Google API的*.csv文件的 mimeType 遇到问题,我找到了一份Google API文档文件对应的 MIME 类型列表:

Google文档格式 转换格式 相应的MIME类型
文档 HTML text/html
HTML(已压缩) application/zip
纯文本 text/plain
富文本 application/rtf
开放办公室文档 application/vnd.oasis.opendocument.text
PDF application/pdf
MS Word文档 application/vnd.openxmlformats-officedocument.wordprocessingml.document
EPUB application/epub+zip
电子表格 MS Excel application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
开放办公室电子表格 application/x-vnd.oasis.opendocument.spreadsheet
PDF application/pdf
CSV(仅第一张表) text/csv
TSV(仅第一张表) text/tab-separated-values
HTML (压缩包) application/zip
图像 JPEG image/jpeg
PNG image/png
SVG image/svg+xml
PDF application/pdf
演示文稿 MS PowerPoint application/vnd.openxmlformats-officedocument.presentationml.presentation
Open Office 演示文稿 application/vnd.oasis.opendocument.presentation
PDF application/pdf
纯文本 text/plain
应用脚本 JSON application/vnd.google-apps.script+json

来源网址: https://developers.google.com/drive/v3/web/manage-downloads#downloading_google_documents 在“Google Doc formats and supported export MIME types map to each other as follows”下面的表格中。

还有另一个列表

MIME 类型 描述
application/vnd.google-apps.audio
application/vnd.google-apps.document Google 文档
application/vnd.google-apps.drawing谷歌图形
application/vnd.google-apps.file 谷歌云端硬盘文件
application/vnd.google-apps.folder 谷歌云端硬盘文件夹
application/vnd.google-apps.form 谷歌表单
application/vnd.google-apps.fusiontable 谷歌融合表
application/vnd.google-apps.map 我的地图
application/vnd.google-apps.photo
application/vnd.google-apps.presentation 谷歌幻灯片
application/vnd.google-apps.script 谷歌应用脚本
application/vnd.google-apps.site 谷歌网站
application/vnd.google-apps.spreadsheet 谷歌表格
application/vnd.google-apps.unknown
application/vnd.google-apps.video
application/vnd.google-apps.drive-sdk 第三方快捷方式

来源在这里: https://developers.google.com/drive/v3/web/mime-types

但第一个对我的使用情况更有帮助。


因为漂亮的格式化表格,加一下 :) - Stijn de Witt
这是来自mozilla.org的另一个列表,可以参考有关MIME类型的疑问。 - Gleichmut

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