0

我的问题是,即使它存在,我也可以将保存图片保存到 gridFS,我已经验证,它会从控制台向我显示 pure 及其名称和大小。这是代码:

连接 = 连接()

保存到数据库的类:

类配置文件(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)

从数据库中读取的类:

类简介(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="{{头像}}" />

但什么都没有显示!

4

2 回答 2

3

除非您想使用base64 URI作为图像源,否则您应该使用 url,然后创建一个视图以从该视图返回数据。如果您使用的是 nginx,您可能会对nginx-gridfs模块感兴趣,以获得更好的性能。

于 2012-08-13T16:55:32.567 回答
2

标签的src属性img(通常)不包含图像数据本身,而是包含图像的 URL。我认为您混淆了两个单独的请求和响应:

  1. 包含<img src="..." />标签的 HTML 页面:

    class Profil(tornado.web.RequestHandler):
        self.render('profile.html',
            avatar=self.reverse_url('avatar', avatar_id))
    
  2. 图像本身(需要单独的处理程序):

    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())
    
于 2012-08-15T14:40:22.447 回答