谷歌应用引擎上的 mimetypes.mime_guess() 行为奇怪
Posted
技术标签:
【中文标题】谷歌应用引擎上的 mimetypes.mime_guess() 行为奇怪【英文标题】:mimetypes.mime_guess() on google app engine behaves strange 【发布时间】:2012-05-07 18:41:35 【问题描述】:在我的 python shell 中,我可以做到
>>> 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"))
我做错了吗? :)
顺便说一句 - 在我的 macbooks shell 中是 python 2.7,在 app-engine 上也是 2.7
【问题讨论】:
我在使用 .docx、.xlsx、.webm 以及许多其他文件扩展名时遇到了同样的问题:guess_type 在开发环境中工作正常,在 Google App Engine 中返回 None。 我发现的解决方法是从 dev env 中获取 mimetypes.types_map 字典,并使用手工制作的 guess_type 函数在该字典上执行 get()。 【参考方案1】:.svg
不包含在 mimetypes
模块中嵌入的默认 types_map
中:
>>> import mimetypes
>>> print '.svg' in mimetypes.types_map
False
mimetypes
模块从system files 添加额外的扩展/mimetypes,并且在/etc/mime.types
中的大多数发行版上都定义了svg
$ cat /etc/mime.types | grep svg
image/svg+xml svg svgz
但不幸的是,它没有在 App Engine 沙箱中定义。
你应该在public issue tracker上填写一个缺陷
作为一种解决方法,您可以自己使用 mimetypes.add_type
注册 mimetype
>>> 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)
【讨论】:
感谢您的澄清和解决方法 :) - 但是,这真的算作缺陷吗? 我也可以被视为功能请求:)【参考方案2】:您也可以直接编辑 C:\Python27\Lib\mimetypes.py:
在types_map
字典中插入'.svg' : 'image/svg+xml'
。
信用:source
【讨论】:
以上是关于谷歌应用引擎上的 mimetypes.mime_guess() 行为奇怪的主要内容,如果未能解决你的问题,请参考以下文章
谷歌应用引擎上的xmpp可以将消息推送到javascript客户端吗