4

我有一個應用程序允許用戶在blobstore中保存斑點。我現在有一個模式,但我對更簡單,扭曲更少的東西感興趣。在上下文中,想象一下,我的應用允許用戶上傳動物圖片,其中描述了動物正在做什麼。用Google Endpoint保存斑點

當前模式

  1. 用戶叫我端點API來保存動物的paragraphname在實體Animal注意:Animal實體實際上有4個字段(name,paragraph,BlobKeyblobServingUrl作爲字符串)。但是端點API只允許保存上述兩個。

  2. 在端點法,在App引擎側,節約nameparagraph後,我提出以下調用生成一個blob服務的URL,這我的終點方法返回給調用者

    @ApiMethod(NAME = 「saveAnimalData」,httpMethod = HttpMethod.POST) public String saveAnimalData(AnimalData request)throws Exception { ... BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService(); String url = blobstoreService.createUploadUrl(「/ upload」); 返回網址; }

  3. 在android方面,我使用普通的http調用將圖像的byte []發送到blobstore。我使用apache DefaultHttpClient()注: Blob存儲區中,保存圖像後,叫我用blob鍵的應用程序引擎服務器和服務網址

  4. 我讀從Blob存儲的響應(Blob存儲區叫我的回調URL)使用普通的Java Servlet,即public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException。從servlet中,我將BlobKeyblobServingUrl放入相關動物的Animal實體中。 (我已經將一些元數據傳遞給blobstore,我用它作爲標記來識別相關的動物實體)。

需要的模式

這是你的迴應用武之地必要,我想消除了Java Servlet,並有我的整個API僅限於谷歌的雲終端。所以我的問題是:我將如何使用我的端點執行步驟3和4?

所以我的想法是在我發送paragraphname數據的同時將圖像字節發送到端點方法saveAnimalData。然後在端點方法中,將圖像發送到blobstore,然後將BlobKeyblobServingUrl保留在我的實體Animal中。

您的回答必須在java中。謝謝。

+0

嘿!我使用與您相同的流程,但我有一個問題。在我的success_path servlet中,方法getUploads(req)返回一個空對象..所以我沒有任何blobket或blobServingUrl。你知道怎麼回事?謝謝 – FlavienBert

回答

1

我看到了一個在這裏的兩個問題:

  1. 谷歌雲端點可以處理多文件嗎? - >我不知道這個TBH

  2. 是否有一個簡單的方法來存儲二進制大對象比使用BlobStoreService

這取決於你的圖像的大小。如果您將用戶限制爲< 1MB文件,則可以將圖像存儲爲Animal實體的Blob屬性。它可以讓你繞過BlobStoreService管道。請參閱:https://developers.google.com/appengine/docs/java/datastore/entities?hl=FR

該解決方案仍依賴於雲端點將如何處理多文件作爲原料byte[] ...

我們遇到了GWT +谷歌應用程序引擎同樣的問題在2009年,它是前BlobStoreService已經可用。

GWT RPC和雲端點接口有一些相似之處,對我們來說這是不可能的。我們必須創建一個普通的HTTP Servlet,並使用Streaming Multipart文件解析器,因爲Apache的HTTP Commons使用該文件系統。