Google App Engine がデータを保存する方法について、非常に基本的な理解に苦労しています。
クライアント プロファイルを次のように定義するクラスを定義しました。
class ClientProfile(ndb.Model):
nickname = ndb.StringProperty(required=True)
photo = ndb.BlobProperty()
uuid = ndb.StringProperty(required = True)
jquery.ajax(...) を使用して POST 経由で image.src をアップロードするだけの画像データを取得します。
データは Google アプリ エンジンに適切に送信され、変数に割り当てることができます。
imagesrc = self.request.get('photosrcbase64')
データの内容は次のようになります。
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...
データは image/png で、エンコーディングは Base64 ですが、 Blob で終わるかどうか気にする必要がありますか?
ここで、データを写真 Blob に入れようとすると
たとえば:
clientprofile.photo = imagesrc
この場合、Bad Value Error が表示されます。
BadValueError: str が必要で、u'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAA を取得しました
さまざまなソリューションを使用してあらゆる種類の組み合わせを試したところ、あらゆる種類の BadValue または型エラーが返されました。
私の質問は次のとおりです。1) Blob が気にするのはなぜですか。それがバイナリ ストレージである場合、解釈および/または変換することなく、何でもダンプできるはずです。したがって、Blob は実際には Binary/Raw ストレージであり、物事がどのように格納されているかを気にするのはなぜですか?
2) 2 年前にまだ ndb の代わりに db を使用していたときに、この問題が発生し始めました。データ文字列の先頭にある MIME 情報を取り除き、文字列 Base64 をデコードし、db を使用することで、理解できない解決策を見つけました。 .Blob(...) を使用して文字列を Blob に変換します。問題は、db.Blob() が ndb に存在しないように見えるため、これ以上実行できないことです。
私は、Google アプリ エンジンとブラウザの間で情報が交換される方法において、何か基本的なことが欠けていると確信しています。