【问题标题】:How do I find mime-type in Python [duplicate]如何在 Python 中找到 mime-type [重复]
【发布时间】:2011-05-12 06:23:30
【问题描述】:

我正在尝试用 Python 编写一些 CGI 脚本。如果我的 python 脚本有请求,我如何找到文件类型的 mime-type?

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

【问题讨论】:

  • 一些图片,adderess/image.jpg。但是如果我理解mime-type 是网络浏览器发送的标头的一部分,对吗?那么如何阅读这些标题呢?

标签: python cgi mime-types


【解决方案1】:

你有两个选择。如果幸运的话,客户可以确定文件的 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

【讨论】:

  • guess_type() 只查看 URL,而不是实际内容,因此它只会与您的用户诚实一样准确,也就是说它不会起作用。
【解决方案2】:

假设您使用这样的 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 命令来获得最高的可靠性,尽管这通常成本太高。

【讨论】:

    【解决方案3】:

    您可以使用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'
    

    【讨论】:

      猜你喜欢
      • 2015-12-04
      • 1970-01-01
      • 2010-09-07
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      • 2018-06-16
      相关资源
      最近更新 更多