我有一个表单,它包含文本字段之间的上传图片的元素。
我想将blob存储在blobstore中,并使用ndb.BlobKeyProperty()
将其引用到我的模型(ndb.Model
)中。
在this link所示的方法使用,其从以这种方式所创建的链接称为上传处理程序(UploadHandler
):GAE Blobstore:将blob与其他文本字段一起上传
upload_url = blobstore.create_upload_url('/upload')
upload_url
是在创建上传团块的页面的形式动作。但是,我的表单包含UploadHandler
后处理方法中未处理的其他字段。 临时解决方案,我发现是创建我的表单处理程序,从我的BaseHandler并从BlobstoreUploadHandler继承:
class EditProfile(blobstore_handlers.BlobstoreUploadHandler, BaseHandler)
def get(self):
params['upload_url'] = blobstore.create_upload_url('/upload_blob1')
... fields ...
def post(self):
upload_blob = self.get_uploads()
blob_key = upload_blob[0].key()
value_field1 = self.request.POST.get('field1')
value_field2 = self.request.POST.get('field2')
value_field3 = self.request.POST.get('field3')
...
,此方法有效,但我在main.py
定义一个新的处理程序有每个页面一个blob被上传:
app = webapp2.WSGIApplication([ ('/upload_blob1', handlers.EditProfile),
('/upload_blob2', handlers.EditBlob2Handler),
('/serve/([^/]+)?', handlers.ServeHandler) ],
debug=os.environ['SERVER_SOFTWARE'].startswith('Dev'), config=webapp2_config)
问题:我该如何使用一个单独的上传处理程序(例如:UploadHandler
)是从不同的页面调用来执行上传BLOB任务?我知道对于一个经验丰富的GAE程序员来说这可能非常简单,但我还没有找到解决方案。
到目前为止,您输入的内容都是正确的。如果你有两个单独的表单都需要上传一个blob,他们需要两个独立的处理程序。如果所有表单字段都相同,那么只使用相同的处理程序是有意义的。 – dragonx 2013-04-27 17:41:04
如果我想只有一个上传处理程序('UploadHandler'),那么'handlers.EditProfile'和'handlers.EditBlob2Handler'都会使用该怎么办?那可能吗?怎么样? – 2013-04-27 18:14:28
如果为两个处理程序提交的表单相同,并且两个处理程序相同,则可以通过将相应的url作为目标传递给create_upload_url(),将它们都指向相同的url。如果处理程序不同并且做了不同的事情,那么这将是一个愚蠢的问题。 – dragonx 2013-04-27 19:49:39