2014-08-27 5 views
0

Google App Engine 프로젝트를 개발 중입니다. 사실, 이미지를 BLOBstore에 저장하려면 그 다음에 BLOB 키와 검색 URL을 복구하고 Datastore의 Demand 엔티티에 저장합니다.Blobstore에 이미지 삽입 하시겠습니까?

내 JSP 파일은 다음과 같습니다

<%@ page contentType="text/html;charset=UTF-8" language="java"%> 
    <%@ page import="com.google.appengine.api.blobstore.*"%> 
    <%@ page import="com.Upload"%> 
    <% 
    BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService(); 
    %> 
    <!DOCTYPE html> 
    <html> 
    <head> 
    <meta charset="utf-8" /> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <link href="css/bootstrap.min.css" rel="stylesheet" media="screen"> 
    <link href="css/style.css" rel="stylesheet" media="screen"> 
    </head> 
    <body> 
    <div class="container-narrow"> 
    <div class="masthead"> 
    <ul class="nav nav-pills pull-right"> 
    <li class="active"><a href="/">Accueil</a></li> 
    <li><a href="#upload">Upload</a></li> 
    </ul> 
    <h3 class="muted">Cloud Uploader</h3> 
    </div> 
    <hr /> 

    <form 
    action="<%= blobstoreService.createUploadUrl("/") %>" 
    method="post" enctype="multipart/form-data"> 
    <p> 
    <label>Fichier à envoyer : <input type="file" name="uploadedFile" /></label> 
    </p> 
    <div class="form-actions"> 
    <input type="submit" class="btn" /> 
    </div> 
    </form> 
    </div> 
    <script src="http://code.jquery.com/jquery.js"></script> 
    <script src="js/bootstrap.min.js"></script> 
    </body> 
    </html> 
요청 처리

내 서블릿 :

 public void doGet(HttpServletRequest req, HttpServletResponse resp) 
    throws IOException, ServletException { 
    this.getServletContext().getRequestDispatcher("/UploadForm.jsp").forward(req, resp);} 


    public void doGet(HttpServletRequest req, HttpServletResponse resp) 
    throws IOException, ServletException { 
    BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService(); 
    ImagesService imagesService = ImagesServiceFactory.getImagesService(); 

    Map<String, List<BlobKey>> blobs = blobstoreService.getUploads(req); 

    System.out.println(blobKeys.get(0).toString());//No result 

    DataManager dat=new DataManager(); // this class contains DemandCreate method 

    String personPhotoServingUrl=   imagesService.getServingUrl(ServingUrlOptions.Builder.withBlobKey(blobKeys.get(0)));      
    String personPhotoBlobKey=blobKeys.get(0).toString(); 

    dat.DemandCreate("id3", "", "", "", "", 1, "", "", 3031, "", "", personPhotoBlobKey, personPhotoServingUrl);// this method enables user to store data in Datasotre using Objectify.. 

    resp.sendRedirect("/");} 

이 문제는 내가 이미지를 업로드 할 때, 그것은 잘 작동하고, 블롭 이미지가 발견

을 BlobInfo 엔티티에는 없지만 내 Demand 엔티티에 결과가 추가되지 않았습니다 (이 엔티티에 새로운 삽입 없음). 나는 블롭 삽입 된 이미지의 키 인쇄하려고 :

System.out.println(blobKeys.get(0).toString());//No result 

하지만, 어떤 결과를. 도움 주셔서 감사합니다.

답변

0

, 그것은 : 당신이 일을해야 이럴

사용자가 blob을 성공적으로 업로드 한 후에 호출 될 상대 URL입니다. 그래서 blob이 성공적으로 업로드되면 jsp는 주 디렉토리로 돌아가 doPost() 메소드의 코드를 실행하지 않습니다. 그 이유 때문에 doPost 메소드의 코드를 다른 서블릿에 복사하여이 문제를 해결했습니다 exemple NewDemandHandler의 이름을 딴이 서블릿의 상대 경로에 successpath 편집 :

<form 
action="<%= blobstoreService.createUploadUrl("/NewDemandHandler") %>" 
method="post" enctype="multipart/form-data"> 
0

얼룩말은지도입니다. 맵 모양이나 키 목록에 키를 원하십니까? .

blob.keySet() toArray() [0]

당신이 할 수있는 BlobKeys의 목록 가져 오려면 :

방울을

당신이 할 수있는 맵에 키를 얻으려면

0

블롭 데이터를 blobs으로 저장하고 blobKeys으로 저장하지 마십시오.

<form 
action="<%= blobstoreService.createUploadUrl("/") %>" 
method="post" enctype="multipart/form-data"> 

successPath은 다음과 같습니다 인해 JSP 파일에 값을 "/"했다 successpath에 문제가 해결

System.out.println(blobs.get("uploadedFile").toString()); 
+0

난 당신이 말한 것을 시도하지만 불행히도 어떤 결과도했습니다. – GenIce