我正在尝试Python中的一些CGI脚本。如果请求来到我的python脚本,我如何找到文件类型的mime类型?
更新:添加更多信息 现在有些图片,adderess / image.jpg。但是,如果我理解mime-type是Web浏览器发送的标题的一部分,对吧?那么如何阅读这些标题?
答案 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
命令获得最高的可靠性,尽管这通常成本太高。