我正在尝试使用龙卷风、石油和 mongodb 来做到这一点。
avat = self.request.files['avatar'][0]["body"]
nomfich = self.request.files['avatar'][0]["filename"]
try:
image = Image.open(StringIO.StringIO(buf=avat))
size = image.size
type = image.format
avatar = r"/profile-images/{0}/{1}".format(pseudo, nomfich)
except IOError:
self.redirect("/erreur-im")
和数据库代码:
user={
"pseudo": pseudo,
"password":password,
"email":email,
"tel":tel,
"commune":commune,
"statut":statut,
"nom":nom,
"prenom":prenom,
"daten":daten,
"sexe":sexe,
"avatar":avatar
}
self.db.essog.insert(user)
它成功了,“头像”被保存,但没有图像,它只保存一个名字!
我的问题是:
- 要了解数据库如何处理图片,我必须制作image.save(path, format),但是路径是正常系统路径(windows或linux)的路径吗?
- 配置文件很简单,我将图片上传限制为500ko,mongodb中的文档为16mb,因此该文档将处理整个配置文件,但是即使对于包含图片的小文档,我也必须使用gridFS吗?
关键问题是图片保存路径,我被卡住了,这是我第一次处理数据库,所以很抱歉这个问题。
您不一定需要 GridFS 在 MongoDB 中存储文件,但它肯定会带来更好的体验,因为它处理二进制数据的拆分和保存,同时使元数据也可用。然后您可以将 ID 存储在您的User
文件到头像图片。
除此之外,您还可以直接在文档中存储二进制数据,尽管在代码中您没有保存数据。你只需用以下命令打开它PIL.Image
,但随后什么也不做。
假设您正在使用pymongo
对于您的驱动程序,我认为您可以做的就是将二进制数据包装在Binary容器 http://api.mongodb.org/python/1.6/api/pymongo/binary.html,然后存储它。这未经我测试,但我认为它应该有效:
from pymongo.binary import Binary
binary_avatar = Binary(avat)
user={
...
"avatar":avatar,
"avatar_file": binary_avatar
...
}
话虽这么说...只是让自己更轻松并使用GridFS http://www.mongodb.org/display/DOCS/GridFS。这就是它的目的。
如果您要使用 GridFS,它可能如下所示:
from gridfs import GridFS
avat_ctype = self.request.files['avatar'][0]["content_type"]
fs = GridFS(db)
avatar_id = fs.put(avat, content_type=avat_ctype, filename=nomfich)
user={
...
"avatar_name":avatar,
"avatar_id": avatar_id
...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)