2014-08-27 143 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> 

我的servlet其处理请求:

 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实体中(此实体中没有新的插入)。 我试图打印插入图像的blob键:

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

但没有结果。 感谢您的帮助。

回答

0

问题是解决了,这是由于其曾在JSP文件中的值 “/” 的successpath:

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

的successPath是将在用户成功上传blob后调用的相对URL。 因此,当成功上传blob时,jsp将返回到主体目录,并且不会执行doPost()方法的代码。因此,我通过将doPost方法的代码复制到其他servlet来解决此问题命名为例如NewDemandHandler并编辑成功路径到这个servlet的相对路径:

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

blob是一个地图。你想要地图blob或BlobKeys列表的关键吗?

为了得到一键地图你可以做:)

blob.keySet()指定者([0]

要获得BlobKeys的列表,你可以这样做:

BLOB .get(blob.keySet()。toArray()[0])。get(0).toString()

0

将BLOB数据保存到blobs而不是blobKeys

恕我直言,你应该这样做:

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

我试过你说的,但不幸的是没有结果。 – GenIce 2014-08-27 20:53:03