我有一個表單,它包含文本字段之間的上傳圖片的元素。
我想將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