0

ユーザーがhttp://www.example.com/some-random-symbols-1x1.pngにアクセスするたびに、透明な画像1x1pxを返す必要があります。それに応じたファイルを作成しましたが、ユーザーに返すためにコードでそれをどのように読み取る必要がありますか?データストアまたはブロブストアから画像を表示する方法を知っています。しかし、バイナリファイルを読み取って返す方法がわかりません。

次の理由により、静的ファイルにすることはできません。

  1. urlにはsome-random-symbolsが含まれます。
  2. URLにアクセスしたら、画像を表示する前に、誰かがファイルにアクセスしたことをログに記録したいと思います。
4

2 に答える 2

3

1x1の透明なPNG(またはGIF)は十分に小さいため、base64表現を直接ハードコーディングして、 self.response.write()(デコード後に)直接送信できます。

毎回ディスクから読み取るのは比較的コストがかかります。そのルートに行きたい場合は、グローバル変数を遅延初期化します。

于 2012-10-23T19:24:30.087 に答える
2

より一般的なケースでは、blobstoreとBlobstoreDownloadHandlerを使用しますが、メモリに確実に収まる小さなgifの場合は、次のようにファイルのコンテンツを読み取ります。

with open('path/to/file.gif') as f:
  img_content = f.read()

これをハンドラーの外に置くので、インスタンスごとに1回実行されました。2.5を使用している場合は、futureから「with」をインポートするか、自分でファイルを開いて閉じる必要があります。

次に、ハンドラーで、webapp2を想定します。

self.response.content_type = 'image/gif'
self.response.write(img_content)
于 2012-10-23T18:13:10.130 に答える