我一直在努力了解谷歌应用引擎如何存储数据的一些非常基本的理解
我已经定义了一个定义客户端配置文件的类:
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...
这么好,数据是图像/png,编码是 Base64,但我应该关心它是否以 Blob 结尾?
现在,如果我尝试将数据放入照片 Blob
例如:
clientprofile.photo = imagesrc
在这种情况下,我收到错误值错误:
BadValueError: Expected str, got u'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAA
我使用不同的解决方案尝试了各种组合,并得到了各种 BadValue 或类型错误。
我的问题是:1)为什么 Blob 关心,如果它是二进制存储,我应该能够在其中转储任何东西而无需解释和/或转换它,所以 Blob 真的是二进制/原始存储和为什么它关心事物如何存储在其中?
2)我在2年前仍然使用db而不是ndb时开始遇到问题,我通过剥离数据字符串开头的MIME信息,解码字符串Base64并使用db找到了一个我不理解的解决方案.Blob(...) 将我的字符串转换为 Blob。问题是 db.Blob() 似乎在 ndb 中不存在,所以我不能再这样做了。
我确信我在谷歌应用引擎和浏览器之间交换信息的方式中遗漏了一些基本的东西,并提前感谢您提供清晰的答案