【问题标题】:Python App Engine uploaded image content-typePython App Engine 上传的图片内容类型
【发布时间】:2010-11-27 10:03:51
【问题描述】:

我知道我可以通过使用 POST 到 App Engine 的表单来接受图片上传,如下所示:

<form action="/upload_received" enctype="multipart/form-data" method="post">
<div><input type="file" name="img"/></div>
<div><input type="submit" value="Upload Image"></div>
</form>

然后在 Python 代码中我可以做类似的事情

image = self.request.get("img")

但是,当稍后将其显示给用户时,我如何才能确定该图像的内容类型应该是什么?似乎最可靠的方法是从图像数据本身中找出这一点,但如何轻松获得呢?我在 google.appengine.api 图像包中没有看到任何合适的东西。

我应该只在自己的代码中寻找神奇的图像标题,还是在某个地方已经有方法?

编辑:

这是我最终使用的简单解决方案,似乎对我的目的来说工作得很好,并且避免了将图像类型作为单独的字段存储在数据存储中:

# Given an image, returns the mime type or None if could not detect.
def detect_mime_from_image_data(self, image):
    if image[1:4] == 'PNG': return 'image/png'
    if image[0:3] == 'GIF': return 'image/gif'
    if image[6:10] == 'JFIF': return 'image/jpeg'
    return None

【问题讨论】:

    标签: python image google-app-engine upload multipart


    【解决方案1】:

    不要使用 self.request.get(fieldname),而是使用 self.request.POST[fieldname]。这将返回一个 cgi.FieldStorage 对象(有关详细信息,请参阅 Python 库文档),该对象具有“文件名”、“类型”和“值”属性。

    【讨论】:

    • 这给了我错误“AttributeError: UnicodeMultiDict instance has no call method”
    • @yourfriendzak 你仍在使用括号(),而不是方括号[]
    【解决方案2】:

    试试python mimetypes模块,它会为你猜出内容类型和编码,

    例如

    >>导入 mimetypes

    >>mimetypes.guess_type("/home/sean/desktop/comedy/30seconds.mp4")

    ('video/mp4', 无)

    【讨论】:

      【解决方案3】:

      根据我的研究,除了 Internet Explorer(至少是第 6 版)之外的其他浏览器通过使用文件的扩展名来确定文件的 mime 类型。鉴于您需要图像 mime 类型,您可以使用简单的 Python 字典来实现此目的。

      不幸的是,我不知道 Python 中有任何方法可以通过读取一些魔术字节来尝试猜测图像类型(就像fileinfo 在 PHP 中所做的那样)。也许您可以将 EAFP(请求宽恕比许可更容易)原则与 Google appengine 图像 API 一起应用。

      是的,图像 API 似乎没有告诉您已加载的图像类型。在这种情况下,我要做的是构建 Python 字典以将文件扩展名映射到图像 mime 类型,而不是在期待 NotImageError() 异常的同时尝试加载图像。如果一切顺利,那么我认为 mime 类型没问题。

      【讨论】:

        猜你喜欢
        • 2013-09-14
        • 2013-08-25
        • 1970-01-01
        • 2019-04-02
        • 2015-02-07
        • 2012-09-05
        • 2013-07-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多