【问题标题】:Inserting image in Blobstore?在 Blobstore 中插入图像?
【发布时间】:2014-10-21 11:42:25
【问题描述】:

我正在开发一个 Google App Engine 项目。事实上,我想将图像保存在 blobstore 中, 之后,我恢复 blob 密钥和服务 url,并将它们存储在 Datastore 中的 Demand 实体中。

我的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("/");}

问题是当我上传图像时,它工作正常,blob 和图像在 BlobInfo 实体中找到,但在我的 Demand 实体中没有添加结果(在此实体中没有新插入)。 我试图打印插入图像的 blob 键:

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

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

【问题讨论】:

    标签: java google-app-engine jakarta-ee blobstore


    【解决方案1】:

    blob 是一个地图。您想要地图 blob 的键还是 BlobKeys 列表?

    要获得地图的钥匙,您可以这样做:

    blob.keySet().toArray()[0]

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

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

    【讨论】:

      【解决方案2】:

      您将 blob 数据保存到 blobs,而不是 blobKeys

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

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

      【讨论】:

      • 我已经尝试过你所说的,但不幸的是也没有结果。
      【解决方案3】:

      问题解决了,是因为成功路径在jsp文件中有值“/”:

       <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">
      

      【讨论】:

        猜你喜欢
        • 2012-06-11
        • 1970-01-01
        • 1970-01-01
        • 2013-07-24
        • 2015-05-22
        • 2014-02-07
        • 2013-05-06
        • 2015-02-06
        • 1970-01-01
        相关资源
        最近更新 更多