繁体   English   中英

如何将base64图像存储为GAE数据存储区中的文件

[英]How to store base64 image as a file in GAE datastore

我有一个用base 64编码的图像,我希望将其存储在我的数据存储模型中。

class Surveys(db.Model):
    name = db.StringProperty(required = True)
    text = db.TextProperty(required = True)
    image = db.BlobProperty()
    created = db.DateTimeProperty(auto_now_add = True)

如何将base64字符串转换回我可以放入数据库的文件? 以下是我如何为普通文件执行此操作。

name = 'test'
text = 'test'
image = self.request.get('img')
s = Surveys(name = name, text = text)
s.image = db.Blob(image)
s.put()

您在寻找解码base64数据的方法吗?

您可能希望查看Python提供的各种base64实用程序 例如, base64.b64decode

import base64

binary_data = base64.b64decode(base64_encoded_string)

假设JPEG文件被正确编码为base64,这将“反转”操作 - 返回与原始文件内容相同的字节串。 所有文件“元信息”在此过程中都会丢失:您只能获取文件的内容。 不是其原始名称,权限等。

您可以将base64字符串直接存储到数据存储中,然后在运行时在需要发送JPEG字节时对其进行解码。

或者反过来做...我更喜欢在存储到数据存储区之前首先解码base64,因为它的字节效率更高,你只需要解码一次。

并且您在这里不需要“文件”的概念……您只需将图像存储为字节,当您需要将其以JPEG格式发送到浏览器时,只需创建适当的http标头即可(例如Content-Type:image / jpeg)并回显/写入http体中的字节。

要添加到其他所有内容(这都是很好的建议):考虑使用ndb(新数据库)而不是db作为模型。 如果对单个图像检索执行get_by_id(),则ndb将为您处理memecache。 这将真正加快您经常访问的图像的延迟。 另外,如果它是一个经常访问的图像,则除了类型之外,还要在响应标头中添加一个缓存控制语句。 HTH。 -stevep

self.response.headers['Content-Type'] = 'image/jpeg'
self.response.headers['Cache-Control']  = 'public, max-age=315360000'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM