如何在Python中查找mime类型

1 投票
3 回答
4466 浏览
提问于 2025-04-16 07:17

我正在尝试用Python做一些CGI脚本。如果有请求发送到我的Python脚本,我该如何找到文件类型的mime类型呢?

更新:添加更多信息 现在有一些图片,比如地址是/adress/image.jpg。但是如果我没理解错的话,mime类型是网页浏览器发送的头信息的一部分,对吧?那我该如何读取这些头信息呢?

3 个回答

0

你可以通过运行 pip install filemime 来安装这个软件包,然后可以这样使用它。它可以帮助你找到各种文件的类型和 MIME 类型,详细信息可以查看 filemime

from filemime import filemime

fileObj = filemime()

mime = fileObj.load_file("Kodi_Kodi.mp3",mimeType=True)
print(f"mime-type: {mime}")

输出结果:

mime-type: 'audio/mpeg'
0

假设你正在用一个HTML表单提交文件,像这样:

<form enctype="multipart/form-data" method="post">
    <input name="userfile" type="file" />
    <input type="submit" value="Send File" />
</form>

在Python的CGI脚本中,你可以用下面的方式来获取文件类型:

form = cgi.FieldStorage()
filetype = form['userfile'].type

需要注意的是,提交的文件类型是由客户端的网页浏览器决定的,并不是由Python的CGI库或HTTP服务器来检测的。你可以使用Python的 mimetypes 模块,根据文件扩展名来猜测MIME类型(比如:mimetypes.guess_type(form['userfile'].name))。另外,你也可以使用UNIX的 file 命令来获得更高的准确性,不过这通常会消耗更多的资源。

2

你有两个选择。如果运气好的话,客户端可以确定文件的类型(mimetype),并把它包含在表单提交中。通常这个信息会放在一个名为“filetype”或者类似名字的输入框里。

如果不能的话,你可以根据文件的扩展名在服务器上猜测文件类型。这有点依赖于你使用的mimetypes模块是否更新。需要注意的是,你可以在这个模块里添加新的类型或者覆盖已有的类型。然后你可以使用“guess_type”这个函数,它会根据文件名的扩展名来判断文件类型。

import mimetypes
mimetypes.add_type('video/webm','.webm')

...

    mimetypes.guess_type(filename)

更新:如果我没记错的话,你可以从“Content-Type”这个头信息中获取客户端对文件类型的判断。很多时候,这个值会是'application/octet-stream',这几乎没什么用。

所以假设你在使用cgi模块,并且通过常规的multipart表单上传文件,浏览器会帮你猜测文件类型。它的猜测效果还不错,这个信息会传递到form.type参数中。你可以这样做:

import cgi
form = cgi.FieldStorage()
files_types = {};
if form.type == 'multipart/form-data':
    for part in form.keys():
        files_types[form[part].filename] = form[part].type
else:
    files_types[form.filename] = form.type

撰写回答