2013-04-27 58 views
5

我有一个表单,它包含文本字段之间的上传图片的元素。
我想将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程序员来说这可能非常简单,但我还没有找到解决方案。

+0

到目前为止,您输入的内容都是正确的。如果你有两个单独的表单都需要上传一个blob,他们需要两个独立的处理程序。如果所有表单字段都相同,那么只使用相同的处理程序是有意义的。 – dragonx 2013-04-27 17:41:04

+0

如果我想只有一个上传处理程序('UploadHandler'),那么'handlers.EditProfile'和'handlers.EditBlob2Handler'都会使用该怎么办?那可能吗?怎么样? – 2013-04-27 18:14:28

+0

如果为两个处理程序提交的表单相同,并且两个处理程序相同,则可以通过将相应的url作为目标传递给create_upload_url(),将它们都指向相同的url。如果处理程序不同并且做了不同的事情,那么这将是一个愚蠢的问题。 – dragonx 2013-04-27 19:49:39

回答

0

简答:是的,你可以。

处理程序只是解析您的上传表单然后根据信息执行操作的代码。

从技术上讲,即使对于不同的上传,你也可以拥有一种形式,但这取决于你是否希望分割代码。例如,如果你的form1上传了“名字”“姓”“喜欢的颜色”并且你的form2上传了“名字”“姓”“喜欢的号码”,那么你的/上传处理程序可以简单地读取参数并以不同方式处理它们

如果(req.getParameter( “Favorite_Number”)!= NULL){做任何}

不然,如果(req.getParameter( “Favorite_Color”)!= NULL){做任何}

这是只是一个设计问题。你的问题是你是否可以使用一个处理程序,答案是肯定的。但是,如果功能不同,建议使用不同的。

相关问题