首页 文章

GAE Blobstore:上传blob以及其他文本字段

提问于
浏览
5

我有一个表单,在文本字段之间包含一个上传图片的元素 .
我想将blob存储在blobstore中,并使用 ndb.BlobKeyProperty() 在我的模型( ndb.Model )中引用它 .
this link中显示的方法使用上传处理程序( UploadHandler ),该处理程序是从以这种方式创建的链接中调用的:

upload_url = blobstore.create_upload_url('/upload')

upload_url 是为上传blob而创建的页面中的表单操作 . 但是,我的表单包含 UploadHandler post方法中未处理的其他字段 . 我找到的临时解决方案是为我的表单创建一个处理程序,该处理程序继承自我的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程序员来说这可能非常简单,但我还没有找到解决方案 .

1 回答

  • 0

    简短回答:是的,你可以 .

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

    从技术上讲,即使是针对不同的上传,您也可以拥有一个表单,但这实际上取决于您有多大不同以及是否要分割代码 .

    例如,如果您的form1上传“名字”“姓氏”“收藏的颜色”并且您的form2上传“名字”“姓氏”“收藏号码”,那么您的/上传处理程序可以简单地读取参数并以不同方式处理它们 .

    if(req.getParameter(“Favorite_Number”)!= null)

    否则if(req.getParameter(“Favorite_Color”)!= null)

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

相关问题