0

我正在尝试制作一个将使用谷歌应用引擎服务器的应用程序,用户会将带有图片的数据发送到服务器。服务器会将数据和图片保存在数据存储中(这就是我的目标)。

我已经设法使服务器在没有图片的情况下工作,并且一切都像魅力一样工作。我能够将文本保存在数据存储中,当请求来自客户端时,服务器将发送数据。现在我想添加发送图片并将其存储在数据存储中的功能。在用户发送文件之前,我将文件转换为字符串并发送,在服务器中我得到了整个字符串,但问题是字符串太大,数据存储实体限制为 500 个字节。

我知道我可以将字符串分成小块并保存,我不太喜欢这个,但如果没有其他选择,我可以使用它。

我看到了一些我可以使用 blob 的示例,但我真的不知道如何使用以及是否必须使用,如果答案是使用 blob,我是否必须更改数据存储?并请发布一些使用 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 类型。由于实体的大小限制为 1MB,并且表中的其他字段加上元数据有一点开销,我通常使用这样的代码来保存新图像:

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 回答