我如何在Python中找到mime-type

时间:2010-11-18 20:04:36

标签: python cgi mime-types

我正在尝试Python中的一些CGI脚本。如果请求来到我的python脚本,我如何找到文件类型的mime类型?

更新:添加更多信息 现在有些图片,adderess / image.jpg。但是,如果我理解mime-type是Web浏览器发送的标题的一部分,对吧?那么如何阅读这些标题?

3 个答案:

答案 0 :(得分:2)

您有两种选择。如果幸运的话,客户可以确定文件的mimetype,它可以包含在表单中。通常这是一个输入元素的值,其名称是“filetype”或类似的东西。

否则,您可以从服务器上的文件扩展名中猜出mimetype。这在某种程度上取决于mimetypes模块的最新状态。请注意,您可以在模块中添加类型或覆盖类型。然后使用“guess_type”函数解释文件名扩展名中的mimetype。

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

...

    mimetypes.guess_type(filename)

更新:如果我没记错的话,您可以从“Content-Type”标题中获取客户端对mimetype的解释。很多时候,这就是'application / octet-stream',这几乎是无用的。

因此,假设您使用cgi模块,并且您使用通常的多部分表单上传文件,浏览器将为您猜测mimetype。它似乎做得不错,它会传递给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

答案 1 :(得分:0)

您可能会从python-magic

获得一些里程

答案 2 :(得分:0)

假设您提交的文件格式如下:

<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

考虑到提交的文件类型由客户端Web浏览器确定。 Python CGI库或HTTP服务器未检测到它。您可以使用Python mimetypes模块来猜测文件扩展名中的MIME类型(例如:mimetypes.guess_type(form['userfile'].name))。您也可以使用UNIX file命令获得最高的可靠性,尽管这通常成本太高。