2013-05-21 2 views
1

에 이미지 파일을 저장하면 내가 성공적으로이 코드와 데이터 저장소에 BLOB에 이미지를 저장 :GAE + 스프링 MVC : Blob 저장소

@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 
} 

그리고 난 그냥 Blob 저장소에 저장하려고 그냥 데이터 저장소에 물방울 키를 저장 . 그것은 가능합니까? 내가 this 예를 배울

@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 
} 

이 내 조각하지만 작품이다.

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) 
    .... 

솔루션 :

<form:form action='<%=blobstoreService.createUploadUrl("/admin/product/add")%>' commandName="product" methodParam="POST" enctype="multipart/form-data"> 
:

마지막으로 내가 내 JSP에서 URL을 생성 할 필요가 그것을 발견 012 브로커를 저장하는 대신

답변

1

대신에 문자열 표현을 저장해보십시오.

String blobStr = blobKey.getKeyString(); 

문자열 표현은 쉽게 직렬화하여 데이터 저장소에 저장할 수 있습니다. 당신은 항상 당신의 sugestion에 대한 자신의 String 표현에서

BlobKey blobKey = new BlobKey(blobStr); 
+0

감사 BlobKey 인스턴스를 다시 구성 할 수 있지만,이 오류가 발생이 줄 '지도 <문자열, BlobKey> 모양 = blobstoreService.getUploadedBlobs (요청)를 실행할 때,' –

+0

사과, 외모 알려진 버그 (https://code.google.com/p/googleappengine/issues/detail?id=3223)에 부딪치게됩니다. 마지막 코멘트에서 언급 된 문제가 있습니다. 재확인하기 만하면 새 프로젝트에서 그대로 샘플 코드를 사용해 볼 수 있습니다. – skywalker