【发布时间】:2018-08-28 09:29:02
【问题描述】:
我正在尝试从图像数据 uri 对象创建一个 blobstore 条目,但卡住了。
基本上,我通过 ajax 将 data-uri 作为文本发布,这是有效负载的一个示例:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPA...
我正在尝试使用以下处理程序接收此有效负载。我假设我需要在存储之前将data-uri 转换回图像?所以我正在使用 PIL 库。
我的python处理程序如下:
import os
import urllib
import webapp2
from google.appengine.ext.webapp import template
from google.appengine.ext import blobstore
from google.appengine.ext.webapp import blobstore_handlers
from google.appengine.api import images
class ImageItem(db.Model):
section = db.StringProperty(required=False)
description = db.StringProperty(required=False)
img_url = db.StringProperty()
blob_info = blobstore.BlobReferenceProperty()
when = db.DateTimeProperty(auto_now_add=True)
#Paste upload handler
class PasteUpload(webapp2.RequestHandler):
def post(self):
from PIL import Image
import io
import base64
data = self.request.body
#file_name = data['file_name']
img_data = data.split('data:image/png;base64,')[1]
#Convert base64 to jpeg bytes
f = Image.open(io.BytesIO(base64.b64decode(img_data)))
img = ImageItem(description=self.request.get('description'), section=self.request.get('section') )
img.blob_info = f.key()
img.img_url = images.get_serving_url( f.key() )
img.put()
这可能是各种错误。发帖时出现以下错误:
img.blob_info = f.key()
AttributeError: 'PngImageFile' object has no attribute 'key'
我在这里做错了什么?有没有更简单的方法来做到这一点?我猜我不需要将 data-uri 转换为图像以存储为 blob?
我还希望这个处理程序返回在 blobstore 中创建的图像的 URL。
【问题讨论】:
-
你的
ImageItem定义/类在哪里? -
@ZacharyYoung 抱歉,我之前编辑的内容有点过多并删掉了。我已经添加了 ImageItem 定义回来
-
我有一个可以直接上传到 Blobstore 的解决方案;或让您的服务处理传入的图像。
标签: python google-app-engine google-cloud-datastore blobstore