gpt4 book ai didi

google-app-engine - 为什么 Google App Engine python Blob 关心存储在其中的内容

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:35 25 4
gpt4 key购买 nike

我一直在努力了解谷歌应用引擎如何存储数据的一些非常基本的理解

我定义了一个定义客户端配置文件的类:

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 我收到错误值错误,在这种情况下:

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 中,所以我不能再这样做了。

我确信我在 google app engine 和浏览器之间交换信息的方式中遗漏了一些基本的东西,在此先感谢您的头脑清醒的答案

最佳答案

BlobProperty 是二进制数据。 Python 中的 str 类型完全等同于字节字符串,因为唯一允许的字符是

[chr(byte_value) for byte_value in range(2**8)]

因此,在存储来自 self.request.get('photosrcbase64') 的值(类型为 unicode )之前,您需要转换为类型 str.

你可以直接这样做

imagesrc = str(self.request.get('photosrcbase64'))

或首先尝试解码为 ascii。

关于google-app-engine - 为什么 Google App Engine python Blob 关心存储在其中的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18314154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com