我有一个表格,其中在文本字段之间包括一个上载图片的元素。
我想将 blob 存储在 blobstore 中并使用 ndb.Model 在我的模型 (ndb.BlobKeyProperty()) 中引用它。
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 程序员来说可能非常简单,但我还没有找到解决方案。

最佳答案

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

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

从技术上讲,即使对于不同的上传,您也可以使用一种形式,但这实际上取决于差异性以及是否希望拆分代码。

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

如果(req.getParameter(“Favorite_Number”)!= null){执行任何操作}

否则如果 (req.getParameter("Favorite_Color") != null) {做任何事}

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

关于python - GAE Blobstore : upload blob along with other text fields,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16253638/

10-10 18:53