0

私は GAE (Python) を初めて使用するので、データストアから画像を提供し、クライアント側の Javascript 内でそれらにアクセスする方法について頭を悩ませる必要があります。

私はここでGoogleのチュートリアルをフォローしてきました: Serving Dynamic Images with Google App Engine (Python)

いくつかの画像を保存するためのデータオブジェクトがあるとしましょう

class Default_tile(db.Model)
  name = db.StringProperty()
  image = db.BlobProperty(default=None)

上記のデータベースに画像を追加する正しいコードは次のとおりですか?:

default_tile = Default_tile()
default_tile.name = "grass"
default_tile.image = db.Blob(urlfetch.Fetch("http://www.bbc.com/grass.png").content)
default_tile.put() 

いいえ、クライアント側の JavaScript に次のコードがあるとしましょう。

  var image = new Image();

  image.onload = function() {
    context.drawImage(image, 69, 50);
  };
  imageObj.src = ***how to I get the image, named grass, from the Datastore***

だから私の質問は、どのように画像を取得するのですか?

理想的には、 imageObj.src = /images/grass を使用したいと思います

ご協力いただきありがとうございます。

4

1 に答える 1

1

データストア

例に正しく従いましたが、同じ URL からの画像の取得と表示の部分を見逃していました。

基本的に、この画像を見つけて提供するハンドラーが必要です。titleあなたのケースでは、例があなたのケースにあると仮定しnameます。したがって、画像を取得するための URL は次のようになります。

http://localhost:8080/image?name=grass

これにより画像が配信されるため、クライアントで使用する場合は、単に次のように使用できます

imageObj.src = '/image?name=grass'

ブロブストア API

多くの画像を保存してユーザーから取得することを計画している場合は、代わりにBlobstore APIの使用を検討する必要があります。初心者にとっては少し複雑ですが、はるかに安価な Google Cloud Storage に画像 (またはその他のもの) を保存できるため、後で支払う価値があります。

From that example you'll be able to store and serve blobs, but you could also store the blob_info.key() in your Model using the BlobKeyProperty, instead of the BlobProperty.

Having that instead of pure Datastore, you'll be able to get advantage of the get_serving_url() function that:

Returns a URL that serves the image.

This URL format allows dynamic resizing and cropping, so you don't need to store different image sizes on the server. Images are served with low latency from a highly optimized, cookieless infrastructure.

于 2013-02-01T15:49:57.043 に答える