2012-04-27 42 views
4

在我的Python壳,我可以做mimetypes.mime_guess()在谷歌应用程序引擎的行为奇怪

>>> import mimetypes 
>>> mimetypes.guess_type("ulla.svg") 
('image/svg+xml', None) 

而且它的表现不如预期,但是,运行相同的代码(或至少,这等于例子)在谷歌应用程序引擎,它返回(None, None)

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

我做错了吗? :)

BTW - 这是Python 2.7版在我的MacBook笔记本外壳,并且还2.7的应用程序引擎

+0

我遇到了同样的问题与.DOCX,.XLSX,.webm,aind许多其他的文件扩展名:guess_type在开发环境工作的罚款,并在谷歌应用程序引擎返回无。 – patb 2017-04-27 07:58:37

+0

我发现的解决方法是从开发环境中获取mimetypes.types_map字典,并使用手工制作的guess_type函数在此字典上执行get()。 – patb 2017-04-27 08:04:37

回答

5

.svg不包含在mimetypes模块embbeded默认types_map

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

mimetypes模块添加来自system files的附加扩展/ mimetypes,并且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) 
+0

感谢您的澄清和解决方法:) - 但是,这真的算作一个缺陷? – fasmide 2012-04-27 13:18:10

+0

我也可以被视为功能请求:) – proppy 2012-04-27 13:51:18

0

注册的MIME类型或者你可以直接编辑C:\ Python27 \ LIB \ mimetypes.py:

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

信用:source