2013-05-21 40 views
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"> 

回答

1

而不是保存blobkey,嘗試保存其字符串表示通過

String blobStr = blobKey.getKeyString(); 

字符串表示可以很容易地序列化並保存在DataStore中。你總是可以從他們的字符串表示構建回來的BlobKey實例

BlobKey blobKey = new BlobKey(blobStr); 
+0

感謝您sugestion但這個錯誤發生時運行該行'地圖<字符串的BlobKey>斑點= blobstoreService.getUploadedBlobs(請求);' –

+0

道歉,長相就像您遇到已知[錯誤](https://code.google.com/p/googleappengine/issues/detail?id=3223)。在最後的評論中提到了一項工作。 只需再次確認,您可以嘗試示例代碼,因爲它是在新項目中。 – skywalker