2014-08-31 91 views
0

我想使用下面的代碼上傳圖像到blobstore使用捲曲,我得到以下錯誤「必須從blob上傳回調請求調用」。谷歌Blobstore添加使用捲曲POST

但是如果我使用的一種形式與動作它並上傳:

blobstoreService.createUploadUrl("/upload") 

=== servlet代碼===

public class Upload extends HttpServlet { 
private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService(); 

@SuppressWarnings("deprecation") 
@Override 
public void doPost(HttpServletRequest req, HttpServletResponse res) 
    throws ServletException, IOException { 

    Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(req); 
    BlobKey blobKey = blobs.get("myFile"); 

    } 

}

有誰知道我可以將「blobstoreService.createUploadUrl(」/ upload「)」合併到servlet中,以便我可以執行卷曲請求,例如:

curl -XPOST http://localhost:8888/upload -F "[email protected]" 

我使用的是來自谷歌的開發者頁面下面的例子:

https://developers.google.com/appengine/docs/java/blobstore/

回答

1

這是Blob存儲的工作方式:

  1. 您請求的URL來上傳(提供一些資源)。
  2. 客戶端使用該URL發佈(這意味着請求發送到Blobstore服務器而不是您的應用程序)。
  3. Blobstore服務器接收數據並保存,並將請求轉發給您的應用程序。
  4. 您得到密鑰並運行您的代碼,然後返回到客戶端。

我想說的是,你必須讓Blob存儲做的工作,這意味着你不能有上傳一個固定的網址,你必須第一問一個URL發佈。這就是系統的設計。

所以你必須做2 curl調用,一個請求的URL,然後用它來發布,沒有其他方式。

當然,這並不像性感或簡單,但其他解決方案會很複雜,甚至很昂貴。

+0

嗨海梅,你知道如何或任何資源如何讓我第一次捲曲請求網址? – codeBarer 2014-09-01 05:23:44

+0

只需添加一個返回'blobstoreService.createUploadUrl(「/ upload」)'結果的處理程序。 – 2014-09-01 05:47:30