[英]Uploading to BlobStore in Google App Engine from a Command Line Java Application
[英]Uploading Image To Google App Engine Blobstore - Java
我試圖將圖像從Android客戶端上傳到我的Google App Engine Blobstore,但是遇到問題。 我發現的所有相關帖子都使用了現在不推薦使用的HttpEntity。 我的代碼導致服務器返回500錯誤。
Android客戶端代碼:
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
builder.addPart("file", new FileBody(file, ContentType.MULTIPART_FORM_DATA));
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
httppost.setEntity(reqEntity.build());
HttpResponse httpResponse = httpclient.execute(httppost);
String response = EntityUtils.toString(httpResponse.getEntity());
服務器(App Engine)代碼:
public class BlobUpload extends HttpServlet {
@Override
private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
Map<String, List<BlobKey>> blobs = blobstoreService.getUploads(req);
BlobKey blobKey = blobs.get("file").get(0);
res.setStatus(HttpServletResponse.SC_OK);
res.setContentType("text/plain");
if (blobKey == null) {
res.getWriter().print("failure");
} else {
res.getWriter().print("success");
}
}
}
我已經根據我所看到的例子嘗試了幾次其他的變通,但都無濟於事。 這包括通過將以下行添加到我的客戶代碼中來將Content-Type設置為Multipart / Form-Data:
builder.setBoundary("--theboundary--");
httppost.addHeader("Content-Type", "multipart/form-data; boundary=--theboundary--");
我已經對servlet進行了測試,以確保它可以正常工作,因此,我很肯定問題在於將數據發布到服務器的方式。 我已經搜索了MIME和App Engine文檔(兩者均受限制),並且找不到解決方案。 任何想法/建議或工作示例將不勝感激。
如您從getUploads的Javadoc https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/blobstore/BlobstoreService#getUploads(HttpServletRequest)所看到的,僅應使用對於由createUploadUrl生成的請求。 是您在“新HttpPost(url);”中使用的URL 順便說一句,您是否看到了如何使用GAE將文件從android應用上傳到google應用引擎 (以及有關使用多部分的評論-參見http://evgeny-goldin.com/blog/uploading-files-multipart-post- apache / )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.