谷歌应用引擎上的mimetypes.mime_guess()表现得很奇怪

fas*_*ide 6 python google-app-engine mime webapp2

在我的python shell中,我可以做到

>>> import mimetypes
>>> mimetypes.guess_type("ulla.svg")
('image/svg+xml', None)
Run Code Online (Sandbox Code Playgroud)

并且它的行为符合预期,但是,在谷歌应用引擎上运行相同的代码(或至少,这个相同的例子),它返回 (None, None)

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

我做错了吗?:)

顺便说一句 - 在我的macbooks shell中它是python 2.7,在app-engine上也是2.7

pro*_*ppy 7

.svg不包含在模块的默认types_map嵌入中mimetypes:

>>> import mimetypes
>>> print '.svg' in mimetypes.types_map
False
Run Code Online (Sandbox Code Playgroud)

mimetypes模块从系统文件添加额外的扩展/ mimetypes ,svg在大多数发行版中定义/etc/mime.types

$ cat /etc/mime.types  | grep svg
image/svg+xml                   svg svgz
Run Code Online (Sandbox Code Playgroud)

但不幸的是,它没有在App Engine沙箱中定义.

您应填写公共问题跟踪器上的缺陷

作为一种解决方法,您可以自己注册mimetype mimetypes.add_type

>>> 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)
Run Code Online (Sandbox Code Playgroud)