Python 在表单上上载图像

Python 在表单上上载图像,python,google-app-engine,Python,Google App Engine,我正在使用带有python和jinja框架的google应用程序引擎 我想让用户上传一张图片,在缩略图上使用它 图像将缩略图,不超过10,所以我没有理由不使用数据库 这是我的html <form class="reg-page" method="post" enctype="multipart/form-data" /> <label>Name </label> <input type="text" class="span12" name="

我正在使用带有python和jinja框架的google应用程序引擎

我想让用户上传一张图片,在缩略图上使用它

图像将缩略图,不超过10,所以我没有理由不使用数据库

这是我的html

<form class="reg-page" method="post" enctype="multipart/form-data" />
   <label>Name </label>
   <input type="text" class="span12" name="name" value={{name}}>
   <label>Description  </label>
   <textarea class="span12" name="description" value={{description}}></textarea>
   <label>Photo  </label>
   <div class="fileupload fileupload-new" data-provides="fileupload">
     <div>
       <span class="btn btn-file"><span class="fileupload-new">Select image</span>
       <span class="fileupload-exists">Change</span><input name="image" type="file" /></span>
       <a href="#" class="btn fileupload-exists" data-dismiss="fileupload">Remove</a>
    </div>
   </div>
   <button class="btn-u pull-right" type="submit">Εγγραφή </button>
</form>
{{test}}

名称
描述
照片
选择图像
改变
Εγγραφή 
{{test}}
后端很简单:

class ImgUpload(db.Model):
   name = db.StringProperty()
   description = db.StringProperty(multiline=True)
   img_img = db.BlobProperty()

class testhandler(BaseHandler):

    def get(self):
        self.render("test.html")

    def post(self):
        images = ImgUpload()
        name = self.request.get('name')
        description = self.request.get('description')
        img_img = image = self.request.get("image")
        images.img_img = db.Blob(img_img)
        images.name = name
        images.description = description
        images.put()
        u = ImgUpload.gql("WHERE name = '%s'"%name).get()
        self.response.out.write("""<img src="/test?test=%s"></img>""" %u.key())


app = webapp2.WSGIApplication([("/test",testhandler)

                            ],debug=True)
class-ImgUpload(db.Model):
name=db.StringProperty()
description=db.StringProperty(多行=True)
img_img=db.BlobProperty()
类testhandler(BaseHandler):
def get(自我):
self.render(“test.html”)
def post(自我):
images=ImgUpload()
name=self.request.get('name')
description=self.request.get('description')
img\u img=image=self.request.get(“图像”)
images.img\u img=db.Blob(img\u img)
images.name=名称
images.description=说明
images.put()
u=ImgUpload.gql(“其中名称='%s'%name).get()
self.response.out.write(“”%u.key())
app=webapp2.WSGIApplication([(“/test”,testhandler)
],debug=True)

当我运行代码时,我看到一个损坏的图像

收到帖子后,您需要创建一个模型来存储图像

e、 g

然后,您需要创建一个处理程序,将图像的url映射到从数据存储中获取图像的一些代码,并正确返回数据集和内容类型头。 您还可以在jinja代码中使用实体的属性来设置img标记中的宽度和高度

在代码中,您正在使用

“”%u.key())

现在需要将/test?test=映射到get处理程序,然后它需要执行
self.response.write()。此外,如果您将图像提供给旧版本的IE,您还需要使用图像扩展名设置文件名


不要对图像执行GQL查询来构造您的
标记,只要您执行了images.put()

Yes,您就已经拥有了带有images.key()的对象的键。我已经这样做了。我知道如何使用数据库,但我的代码是在html中显示数据库的测试。为了避免误解,我更新了我的帖子:)鉴于这是一个相当基本的功能,我无法假设您将图像存储在哪里。我的回答的其余部分是,您的处理程序将图像URL映射到获取图像并返回图像的get请求。您的测试方法呈现一些html。在这里面,您应该有一个img标记,该图像标记中的URL将映射到从数据存储中获取图像的GET处理程序。我已添加。请参见上面的添加,您缺少一些步骤
class Image(ndb.Model): 

    file = ndb.BlobProperty()
    filename = ndb.StringProperty()
    mimetype = ndb.StringProperty()
    size = ndb.IntegerProperty()
    width = ndb.IntegerProperty()
    height = ndb.IntegerProperty()