我正在尝试使用表单为我的应用的用户上传个人资料图片。但是我收到服务器端错误说
AttributeError: 'module' object has no attribute 'Blob'
我按照Google提供的this示例,其中有类似
的内容avatar = self.request.get('img')
greeting.avatar = db.Blob(avatar)
greeting.put()
在我自己的应用程序中,我在我的Member
类中创建了一个方法,如下所示:
def uploadProfilePicture(self, image):
self.profile_photo = ndb.Blob(image)
self.put()
然后创建了一个Handler来处理这个问题:
class ProfilePictureHandler(webapp2.RequestHandler):
def post(self):
usr=self.request.get('username')
image=self.request.get('img')
member=Member.get_or_insert(usr)
member.uploadProfilePicture(image)
我通过添加:
修改了我的应用的导入 from google.appengine.api import images
(这就是我所需要的吗?)
这里的明显问题是,我的应用使用*ndb*
,而教程使用*db*
。最好的解决方法是什么?
答案 0 :(得分:1)
你不需要db.blob for ndb - 只需使用self.profile_photo = image。
这是一个非常简单的例子:
class TestBlobModel(ndb.Model):
img = ndb.BlobProperty()
class Test(webapp2.RequestHandler):
def get(self):
image_id = self.request.get('id')
if image_id:
m = TestBlobModel.get_by_id(long(image_id))
self.response.headers['content-type'] = 'image/png'
self.response.out.write(m.img)
else:
self.response.out.write("""
<form enctype="multipart/form-data" action="/test" method="POST">
<input type="file" name="image" />
<input type="submit" />
</form>""")
def post(self):
img_data = self.request.get('image')
m = TestBlobModel()
m.img = img_data
m.put()
html = '<a href="/test?id=%s">View your image</a>' % m.key.id()
self.response.out.write(html)