0

私の問題は、そこにある場合でも、保存された画像をgridFSに取得できることです。確認したところ、コンソールからの画像とその名前とサイズが表示されます。コードは次のとおりです。

conn = 接続()

データベースに保存するクラス:

クラス プロファイル (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 が含まれます。2 つの別々の要求と応答を混同していると思います。

  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 に答える