1

ユーザーがアップロードしたブロブストアに画像があります(プロフィール写真)。同じもののコピーを作成し、コピーのサイズを変更して、サムネイルとして表示できるようにしたいと考えています。これはプロファイル画像と比較してより頻繁に使用されるため、ImageService を使用する代わりに同じもののコピーを作成したいと考えています。

私がここでやっていることはこれです:

reader = profile_image.open() #get binary data from blob
data = reader.read()

file_name = files.blobstore.create(mime_type=profile_image.content_type)#file to write to

with files.open(file_name, 'a') as f:
   f.write(data)

files.finalize(file_name)


blob_key = files.blobstore.get_blob_key(file_name)

image = images.Image(blob_key = blob_key)
image.resize(width=32, height=32)

entity.small_profile_pic = <MyImageModel>(caption=<caption given by user>,
                                       picture=str(blob_key))

これは私にエラーを与えています:

BadValueError: Image instance must have a complete key before it can be stored as a reference.

これは、ブロブがデータストアに保存(put())されていないためだと思いますが、どうすればよいですか。しませfiles.blobstore.get_blob_key(file_name)んでしたか?

また、お聞きしたいのですが、ブロブストアは get_serving_url() を使用して提供される動的に変換された画像をキャッシュしますか ...

4

1 に答える 1

4

get_serving_url メソッドを使用します。ドキュメントには次のように記載されています。

get_serving_url() メソッドを使用すると、Web に適した画像サムネイルを提供するための安定した専用 URL を生成できます。元の画像の 1 つのコピーを Blobstore に保存し、画像ごとに高パフォーマンスの URL をリクエストするだけです。この特別な URL は、自動的にサイズ変更またはトリミングされた画像を配信できます。また、この URL からの配信では、アプリケーションで CPU や動的な配信負荷が発生することはありません (ただし、帯域幅は通常どおり課金されます)。画像は、高度に最適化された Cookie のないインフラストラクチャから低レイテンシーで提供されます。

また、投稿したコードは、ドキュメントに投稿された例に従っていないようです。私はこのようなものを使用します

img = images.Image(blob_key=original_image_key)
img.resize(width=32, height=32)
thumbnail = img.execute_transforms(output_encoding=images.JPEG)
file_name = files.blobstore.create(mime_type='image/jpeg')#file to write to
with files.open(file_name, 'a') as f: 
    f.write(thumbnail)
files.finalize(file_name)
blob_key = files.blobstore.get_blob_key(file_name)
于 2012-06-07T17:26:06.010 に答える