Python 在表单上上载图像
我正在使用带有python和jinja框架的google应用程序引擎 我想让用户上传一张图片,在缩略图上使用它 图像将缩略图,不超过10,所以我没有理由不使用数据库 这是我的htmlPython 在表单上上载图像,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="
<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()