获取上传文件的MIME Type

标签:Google App Engine, Python

刚才在GAE论坛上看到有人问这个问题,所以就研究了一下。
嘛,纯粹是根据扩展名来猜MIME Type的,所以不保证准确。

首先是获取文件名。
浏览器端需要一个这样的form来上传文件:
<form action="/upload" enctype="multipart/form-data" method="post">
  <div><input type="file" name="file" /></div>
  <div><input type="submit" value="上传" /></div>
</form>
服务器端则从request.body中找出文件名。
一个可能的body如下:
------WebKitFormBoundaryn8MN216PVRt+shPZ Content-Disposition: form-data; name="file"; filename="desktop.ini" [DeleteOnCopy] Owner=keakon Personalized=5 PersonalizedName=My Documents ------WebKitFormBoundaryn8MN216PVRt+shPZ--
可以看出,filename便是文件名,于是用正则表达式处理一下即可:
import re

class Upload(webapp.RequestHandler):
  def post(self):
    p = re.compile(r'filename=\"(.*?)\"')
    m = p.search(self.request.body)
    self.response.out.write(m.group(1))
测试一下,拿到这样一个文件名:
C:\Documents and Settings\keakon\桌面\朱丽叶与梁山伯.txt
接着就用到mimetypes了,使用很简单,最后一行改一下即可:
self.response.out.write(mimetypes.guess_type(m.group(1)))
再测试一下:
('text/plain', None)
搞定收工~

1条评论 你不来一发么↓ 顺序排列 倒序排列

    向下滚动可载入更多评论,或者点这里禁止自动加载

    想说点什么呢?