0

blobStore を使用して Appengine Datastore にファイル/画像をアップロードするにはどうすればよいですか? Google Cloud エンドポイントを使用しています。

これは私のモデルです:

class ProductImage(EndpointsModel):
    _message_fields_schema = ('product', 'enable', 'image')
    product = ndb.KeyProperty(Product)
    image = ndb.BlobKeyProperty(required=True)
    enable = ndb.BooleanProperty(default=True)

API Explorer からテストするにはどうすればよいですか? フロントエンドでは AngularJS を使用しています。

4

1 に答える 1

3

エンドポイントだけでこれを行う方法がわかりませんでした。一部のエンドポイント アプリケーションと一部の webapp2 blobstore_handlers アプリケーションを備えたハイブリッド サーバーが必要でした。これらの部分の Blobstore アップロードの例に従って webapp2 のものを使用すると、機能します。たとえば、フローは次のようになります。

  1. クライアントはアップロード URL を要求します (この呼び出しにはエンドポイントを使用し、基本的には blobstore.create_upload_url(PATH) を実行させます)
  2. クライアントは、指定された URL に画像をアップロードします。これは、blobstore_handlers.BlobstoreUploadHandler メソッドによって処理されます。このメソッドは、アップロードを取り出して blob_info.key() をダンプします (たとえば、JSON で)。
  3. クライアントは createProduct などのエンドポイントを呼び出し、受信した blobkey を ProductImage モデルの残りの部分と共に返します。そのメソッドで get_serving_url を呼び出してモデルに隠しておきたい場合がありますが、後で変更しないでください。
  4. その後、クライアントはその隠された配信 URL を使用して画像を表示できます。

また、私はBlobKeyProperty で多くの「楽しみ」を持っていました。開発環境ではすべて問題なく動作しましたが、「本番環境」では、保存された blobkey で get_serving_url() を呼び出すときに無効な画像エラーが発生しました。これは、ブロブが実際にはビットマップではなく、開発者が気にしていないことが原因である可能性があると思います。

于 2015-02-04T01:03:06.597 に答える