如何在Python中查找文件的MIME类型?

270 投票
19 回答
291461 浏览
提问于 2025-04-11 09:15

假设你想把一堆文件保存到某个地方,比如说保存到BLOBs里。然后你希望通过一个网页把这些文件提供给用户,并且让用户的电脑自动打开合适的应用程序或查看器。

这里有个前提:浏览器是通过HTTP响应中的mime-type(内容类型)头来判断用哪个应用程序或查看器来打开文件的。

基于这个前提,除了文件的字节数据,你还想保存这个文件的MIME类型。

那么,怎么才能找到一个文件的MIME类型呢?我现在用的是Mac,但这个方法在Windows上也应该能用。

浏览器在把文件上传到网页时,会自动添加这个信息吗?

有没有什么好用的Python库可以用来获取这个信息?或者有没有网络服务,甚至更好的是,可以下载的数据库?

19 个回答

59

这看起来非常简单

>>> from mimetypes import MimeTypes
>>> import urllib 
>>> mime = MimeTypes()
>>> url = urllib.pathname2url('Upload.xml')
>>> mime_type = mime.guess_type(url)
>>> print mime_type
('application/xml', None)

请参考 旧帖子

更新 - 在Python 3及以上版本中,现在更方便了:

import mimetypes
print(mimetypes.guess_type("sample.html"))
127

标准库中的 mimetypes模块 可以根据文件的后缀名来判断或猜测文件的MIME类型。

当用户上传文件时,HTTP的POST请求会包含文件的MIME类型和数据。例如,Django会把这些数据作为 UploadedFile 对象的一个属性提供给你。

308

toivotuo 提出的 python-magic 方法已经过时了。现在的 Python-magic 项目在 Github 上,按照那里的说明文档,查找 MIME 类型的方法是这样的。

# For MIME types
import magic
mime = magic.Magic(mime=True)
mime.from_file("testdata/test.pdf") # 'application/pdf'

撰写回答