2013-12-18 14 views
0

我想上傳圖片到blobstore,因爲我想支持大於1MB的文件。現在,我可以找到的唯一方法是客戶端發送POST,以發送元數據,例如地理位置,標籤和服務器放入實體的內容。在這個實體中,服務器還將存儲實際圖像數據的blob的關鍵字,服務器通過向客戶端返回create_upload_url()返回的url來結束請求。這工作正常,但是我可以得到不一致,如第二個請求永遠不會發布,因此blob從未填充。該實體現在指向一個空的blob。Google App Engine:在同一請求中上傳文件和其他字段

我可以看到的唯一解決方案是觸發延遲任務,該任務將檢查blob是否填充了上載。我不是這個解決方案的忠實粉絲,所以我猜想是否有人有更好的解決方案。

+0

客戶端?什麼樣的客戶:申請或表格? – voscausa

+0

根據邏輯,任何事情都很好。可以是移動應用程序,運行在shell上的python腳本,或者是運行在瀏覽器中的東西(例如js)。 – marcorossi

+0

您必須將多部分帖子發送至上傳網址。 – voscausa

回答

1

我經歷了完全相同的思維過程,但在Java中,並最終使用Apache Commons FileUpload。我不熟悉Python,但是您只需要一種處理multipart/form-data上傳的方法。

我將圖像和其他字段上傳到一起,使用JQuery來組裝多部分表單數據,然後我將POST發送到我的服務器。

然後在服務器端,使用Google Cloud Storage client library(Python鏈接)將該文件寫入Google Cloud Storage。這可以在一個塊中完成,或者如果它是一個大文件,則可以「流」。一旦它在GCS中,您的App Engine應用程序就可以使用相同的庫來讀取它,或者您可以使用公共URL直接提供它,具體取決於您設置的ACL。