代码之家  ›  专栏  ›  技术社区  ›  Srikar Appalaraju Tonetel

如何在Python中找到mime类型

  •  1
  • Srikar Appalaraju Tonetel  · 技术社区  · 15 年前

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

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

    3 回复  |  直到 13 年前
        1
  •  2
  •   mjhm    15 年前

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

    否则,您可以从服务器上的文件扩展名猜测mimetype。这在一定程度上取决于mimetypes模块的更新程度。请注意,您可以在模块中添加类型或重写类型。然后使用“guess_type”函数从文件扩展名解释mimetype。

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

    更新:如果我没记错的话,你可以从“Content Type”标题中得到客户对mimetype的解释。很多时候这都是“应用程序/八位字节流”,几乎没用。

    所以假设您使用的是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
    
        2
  •  0
  •   scoffey    15 年前

    假设您提交的文件具有如下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
    

    考虑到提交的文件类型由客户端web浏览器确定。Python CGI库或HTTP服务器没有检测到它。您可以使用Python mimetypes 从文件扩展名猜测MIME类型的模块(例如: mimetypes.guess_type(form['userfile'].name) ). 您还可以使用UNIX file 命令的最高可靠性,虽然这通常是太昂贵的。

        3
  •  0
  •   SingleNegationElimination    8 年前

    你可以从 python-magic

    推荐文章