0

Google App Engine サーバーを使用するアプリケーションを作成しようとしています。ユーザーは画像付きのデータをサーバーに送信します。サーバーはデータと画像をデータストアに保存します(それが私が目指していることです)。

私は画像なしでサーバーを機能させることができました。すべてが魅力的に機能します。テキストをデータストアに保存することができ、リクエストがクライアントから来ると、サーバーがデータを送信します。今、写真を送信してデータストアに保存する機能を追加したいと考えています。ユーザーがファイルを送信する前に、ファイルを文字列に変換して送信します。サーバーで文字列全体を取得しますが、問題は文字列が大きすぎて、データストア エンティティが 500 バイトに制限されていることです。

文字列を小さなカンクに分割して保存できることは知っていますが、これはあまり好きではありませんが、他に選択肢がない場合は使用できます。

Blob を使用できる例をいくつか見ましたが、その方法がよくわかりません。また、必要がある場合、答えが BLOB を使用している場合、データストアを変更する必要がありますか? そしてplzは、blobでデータを処理するいくつかのサンプルコードを投稿します.

必要に応じてコードをアップロードします。thnx rajedbuli。

4

2 に答える 2

2

おそらく、Google Cloud Storage も検討する必要があります。そこにすべての写真を保存し、参照をデータストアに入れることができます。

データストアは確かに blob を格納できますが、GCS が目的に適しているかどうかは疑問です。重要な利点は、クライアント デバイスが GCS サーバーに対して直接 HTTP 操作を実行できることです。そのため、画像を単一の単純な操作として保存でき、画像をテキストに変換する必要がありません。小さなサムネイルです)。

(GCS は、何度もダウンロードされる写真に特に適しています。これは CDN として機能しますが、アプリでこれが当てはまることを示していません。)

于 2013-10-08T16:50:24.813 に答える
1

エンティティが 500 バイトに制限されていると言ったときは驚きました。これは、キーの最大サイズです。文字列をキーとして保存していると思いますが、代わりに別の列に保存する必要があります。これは小さな Python サンプル データ モデルです。

class Image(ndb.Model):
    filename = ndb.StringProperty(required=True)
    size = ndb.IntegerProperty(required=True)
    pic = ndb.BlobProperty(required=True)

上記では、画像のコンテンツにタイプ BlobProperty を使用しました。エンティティのサイズは 1 MB に制限されており、テーブル内の他のフィールドとメタデータのオーバーヘッドが少しあるため、通常、次のようなコードを使用して新しい画像を保存します。

if size > 990000:
    raise Exception('File too large: %s' % size)
obj = Image()  # create new Image object
obj.filename = 'your_filename.png'
obj.size = your_filesize
obj.pic = your_picture_contents
obj.put()  # save the object

それが役立つことを願っています!

于 2013-10-08T15:12:44.713 に答える