在我的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"))

我做错了吗? :)

BTW -在我的Macbooks Shell中为python 2.7,在应用程序引擎上为2.7

最佳答案

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

>>> import mimetypes
>>> print '.svg' in mimetypes.types_map
False
mimetypes模块从system files添加其他扩展名/MIME类型,并且svg在/etc/mime.types的大多数发行版中定义
$ cat /etc/mime.types  | grep svg
image/svg+xml                   svg svgz

但是很遗憾,它没有在App Engine沙箱中定义。

您应该在public issue tracker上填写一个缺陷

解决方法是,您可以使用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)

10-04 20:55