2012-04-27 87 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