假设您想要在某个地方保存一堆文件,例如在blob中。假设您希望通过网页分发这些文件,并让客户端自动打开正确的应用程序/查看器。

假设:浏览器通过HTTP响应中的mime-type (content-type?)报头确定要使用哪个应用程序/查看器。

基于这个假设,除了文件的字节外,还需要保存MIME类型。

如何找到文件的MIME类型?我现在用的是Mac,但这应该也适用于Windows。

浏览器是否在将文件发布到网页时添加此信息?

是否有一个简洁的python库来查找这些信息?WebService还是(更好的)一个可下载的数据库?


当前回答

这似乎很简单

>>> 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"))

其他回答

这似乎很简单

>>> 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"))

toivotuo提出的蟒蛇魔法方法已经过时了。Python-magic当前的主干在Github,基于那里的自述me,找到mime类型,是这样做的。

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

对于可以使用的数组类型数据 magic.from_buffer (_byte_array mime = True)

有3个不同的库包装libmagic。

其中2个在pypi上可用(所以PIP安装可以工作):

filemagic python-magic

另一种类似于python-magic的方法可以在最新的libmagic源代码中直接获得,它可能是您的linux发行版中所拥有的。

在Debian中,python-magic包就是这样的,它像toivotuo说的那样被使用,它并没有像Simon Zimmermann说的那样被淘汰(IMHO)。

在我看来,这是另一种说法(出自《libmagic》的原作者)。

太糟糕了,pypi上不能直接使用。

我已经尝试了很多例子,但与Django mutagen发挥得很好。

检查files是否为mp3

from mutagen.mp3 import MP3, HeaderNotFoundError  

try:
    audio = MP3(file)
except HeaderNotFoundError:
    raise ValidationError('This file should be mp3')

缺点是你检查文件类型的能力是有限的,但如果你不仅想检查文件类型,而且还想访问其他信息,这是一个很好的方法。