我的问题是我可以将保存图片保存到gridFS,即使它在那里,我已经验证并且它向我显示了piture及其名称和控制台的大小。 这是代码:
conn = Connection()
保存到数据库的classe:
class Profile(tornado.web.RequestHandler):
def post(self):
self.db = conn["essog"]
avat = self.request.files['avatar'][0]["body"]
avctype = self.request.files['avatar'][0]["content_type"]
nomfich = self.request.files['avatar'][0]["filename"]
#..operation using PIL to decide to save the picture or not
self.fs = GridFS(self.db)
avatar_id = self.fs.put(avat, content_type=avctype, filename=nomfich) #change the name later to avoid delete using the same name, so generating a different name...
.....
user={..., "avatar":avatar_id}
self.db.users.insert(user)
self.db.users.save(user)
从数据库中读取的类:
类Profil(tornado.web.RequestHandler):
def get(self):
self.db = conn["essog"]
self.fs = GridFS(self.db)
avatar_id = self.db.users.find_one()["avatar"]
...
avatar = self.fs.get(avatar_id).read()
self.render("profile.html",..., avatar=avatar)
并在视图中(profile.html)
img src =“{{avatar}}”/>
但没有显示任何内容!
答案 0 :(得分:3)
除非您想使用base64 URI作为图片来源,否则您应该使用网址,然后创建一个视图以从该视图返回数据。如果您使用的是nginx,您可能会对nginx-gridfs模块感兴趣以获得更好的性能。
答案 1 :(得分:2)
src
标记的img
属性(通常)不包含图像数据本身,而是包含图像的网址。我认为你混淆了两个单独的请求和回复:
包含<img src="..." />
标记的HTML页面:
class Profil(tornado.web.RequestHandler):
self.render('profile.html',
avatar=self.reverse_url('avatar', avatar_id))
图片本身(需要单独的处理程序):
class Avatar(tornado.web.RequestHandler):
def get(self, avatar_id):
avatar = self.fs.get(avatar_id)
self.set_header('Content-Type', avatar.content_type)
self.finish(avatar.read())