1
我成功地保存圖像數據存儲到BLOB與此代碼:GAE + Spring MVC的:保存圖像文件BLOBSTORE
@RequestMapping(value = "/add", method = RequestMethod.POST)
public String add(ModelMap model, Product form, HttpServletRequest request) {
if(ServletFileUpload.isMultipartContent(request)) { // if(form.getImage().getBytes().getSize() != 0) {
try {
Blob file = new Blob(form.getImage().getBytes());
form.setImg(file);
} catch (IOException e) {
e.printStackTrace();
}
}
//save to datastore etc
}
,我只是嘗試將其保存在BLOBSTORE,只是保存在數據存儲中的blob鍵。它是可行的嗎?這是我的片段,但沒有作品:
@RequestMapping(value = "/add", method = RequestMethod.POST)
public String add(ModelMap model, Product form, HttpServletRequest request) {
Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(request);
BlobKey blobKey = blobs.get("image");
form.setImage1(blobKey);
//save to datastore etc
}
我從this學習的榜樣。我得到這個錯誤:
Must be called from a blob upload callback request.
堆棧跟蹤:
java.lang.IllegalStateException: Must be called from a blob upload callback request.
at com.google.appengine.api.blobstore.BlobstoreServiceImpl.getUploads(BlobstoreServiceImpl.java:160)
at com.google.appengine.api.blobstore.BlobstoreServiceImpl.getUploadedBlobs(BlobstoreServiceImpl.java:144)
at com.shop.controller.ProductController.add(ProductController.java:92)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
....
解決方案:
終於讓我找到它,我需要在我的JSP生成的URL:
<form:form action='<%=blobstoreService.createUploadUrl("/admin/product/add")%>' commandName="product" methodParam="POST" enctype="multipart/form-data">
感謝您sugestion但這個錯誤發生時運行該行'地圖<字符串的BlobKey>斑點= blobstoreService.getUploadedBlobs(請求);' –
道歉,長相就像您遇到已知[錯誤](https://code.google.com/p/googleappengine/issues/detail?id=3223)。在最後的評論中提到了一項工作。 只需再次確認,您可以嘗試示例代碼,因爲它是在新項目中。 – skywalker