在Google App Engine上,mimetypes.mime_guess()的行为很奇怪

6
在我的Python Shell中,我可以执行以下操作:
>>> import mimetypes
>>> mimetypes.guess_type("ulla.svg")
('image/svg+xml', None)

在本地运行代码时,它表现如预期。然而,当在Google App Engine上运行相同的代码(或者至少是相同的示例)时,返回值为(None, None)

class TestHandler(webapp2.RequestHandler):
    def get(self):
        import mimetypes
        self.response.out.write(mimetypes.guess_type("ulla.svg"))

我做错了吗?:)

顺便说一下 - 我的Macbook终端使用的是Python 2.7版本,在应用程序引擎上也是2.7版本。


我遇到了与.docx、.xlsx、.webm以及许多其他文件扩展名相同的问题:在开发环境中guess_type工作正常,在Google App Engine中返回None。 - patb
我找到的解决方法是从开发环境中获取mimetypes.types_map字典,并使用手动制作的guess_type函数对该字典进行get()操作。 - patb
2个回答

7

.svg没有包含在mimetypes模块默认的types_map中:

>>> import mimetypes
>>> print '.svg' in mimetypes.types_map
False

mimetypes模块从系统文件中添加附加的扩展名/ MIME类型,而SVG在/etc/mime.types中定义在大多数分发版中。

$ cat /etc/mime.types  | grep svg
image/svg+xml                   svg svgz

很不幸,在App Engine沙盒中未定义此项。
您应该在公共问题跟踪器上填写缺陷报告。
作为解决方法,您可以使用mimetypes.add_type自行注册MIME类型。
>>> import mimetypes
>>> mimetypes.guess_type("ulla.svg")
(None, None)
>>> mimetypes.add_type("image/svg+xml", ".svg")
>>> mimetypes.guess_type("ulla.svg")
('image/svg+xml', None)

谢谢你的澄清和解决方法,但是,这真的算作一个缺陷吗? - fasmide
我也可以被视为一个功能请求 :) - proppy

0

或者您可以直接编辑C:\ Python27 \ Lib \ mimetypes.py:

types_map字典中插入'.svg':'image / svg + xml'

来源:source


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接