2013-04-27 59 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){做任何}

這是隻是一個設計問題。你的問題是你是否可以使用一個處理程序,答案是肯定的。但是,如果功能不同,建議使用不同的。

相關問題