1

まず、これはここではかなり一般的な質問であり、他の同様の StackOverflow の質問を多数見てきましたが、どの回答も問題を解決していません。

基本的に、ユーザーが画像を送信すると -> 空白の画像として投稿され、画像の src をクリックすると空白のページが表示されます。コードの何が問題になっていますか?

これは、さまざまなファイルからのコードの断片のマッシュアップです

<div class="card-image"><img src="/image?img_id={{card.key()}}"></img>

class Card(db.Model):
    image = db.BlobProperty(required = True)

class Image(MainHandler):
    def get(self):
        card = db.get(self.request.get('img_id'))
        if card.image:
            self.response.headers['Content-Type'] = 'image/png'
            self.response.out.write(card.image)
        else:
            self.response.out.write('No image')
 class Gallery(MainHandler):
       image = db.Blob(images.resize(self.request.get('image'), 32, 32))
       #later in the code, a Card is constructed.
4

1 に答える 1

2

あなたのコードは私にはうまく見えます。モデルに画像データが含まれていますか?

2番。画像を提供するための、より優れた、より高速で安価な方法があります。Google は、App Engine の高性能画像提供システムを使用して、ほぼ無料で実行時のサイズ調整を行って画像を提供できます。これを使用するには、blobstore を使用し、get_serving_url を使用する必要があります。

配信 URL の例を次に示します。

https://lh6.ggpht.com/1HjICy6ju1e2GIg83L0qdliUBmPHUgKV8FP3QGK8Qf2pHVBfwkpO_V38ifAPm-9m20q_3ueZzdRCYQNyDE3pmA695iaLunjE=s0

アップデート

ブロブストアを初めて使用する場合は、ブロブストアから画像のアップロードと提供を開始することをお勧めします。ドキュメントのコード例を参照してください。

これが機能したら、get_serving_url を最適化して使用できます。この配信 URL を 1 回取得してデータストアに保存するだけで、html の img タグで使用できます。

ブロブストア blob の提供 URL を取得するコード例を次に示します。ここで、blob 参照はデータストアに保存されます。

class Dynamic(db.Model):                                                                        # key : name
    name = db.StringProperty() 
    blob_ref = blobstore.BlobReferenceProperty()
    serving_url = db.LinkProperty()

dyn= Dynamic.get_by_key_name(key_name)
try :                                                                               # get url with size = 0, do not save it
    dyn.serving_url = images.get_serving_url(dyn.blob_ref, size=None, secure_url=True)
except DeadlineExceededError : 
    try :             # sometimes this request fails, retry. This always works fine
        dyn.serving_url = images.get_serving_url(dyn.blob_ref, size=None, secure_url=True)
    except DeadlineExceededError :
        logging.error('Image API get_serving_url deadline error after retry' %(dyn.key().name()))                        
                return None
    dyn.put()
于 2012-11-26T22:17:31.810 に答える