将图片上传到Google App Engine时出错

时间:2014-05-09 08:53:58

标签: python image google-app-engine app-engine-ndb

我正在尝试使用表单为我的应用的用户上传个人资料图片。但是我收到服务器端错误说

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*。最好的解决方法是什么?

1 个答案:

答案 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)