我用哪个注释在GAE端点上传图像?

时间:2016-07-10 16:47:12

标签: java google-app-engine

我有一个SPI Google端点,我找不到任何用于接受例如MultipartFile file的注释的示例?

@ApiMethod(name = "saveNewBill" ,
             httpMethod = ApiMethod.HttpMethod.POST)
public Bill saveBillImage( @Named("content") MultipartContent f ){
      Bill bill = new Bill();
      return bill;
  }

1 个答案:

答案 0 :(得分:1)

编辑:我刚刚注意到,在阅读Blobstore相关的其他一些内容时,Google现在建议使用Blobstore的Google Cloud Storage INSTEAD来提供媒体服务。

由于您在App Engine上使用端点,因此应使用BlobStore

这是在App Engine上处理图像上传,存储和检索的首选方式。

BlobstoreService中的以下函数将生成一个上传网址,然后您可以使用标准的多部分请求将图像上传到图像数据,并在名为file的参数中传递图像数据。

BlobstoreServiceFactory.getBlobstoreService().createUploadUrl("/[servlet name goes here]");

您需要提供上传完成后请求重定向到的Servlet的名称。这个Servlet可以访问新创建的Blobstore项目,并使用它做一些有意义的事情 - 例如获取图像的服务URL并将其返回给客户端。

以下是Servlet的一小段内容:

    public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

            List<BlobKey> blobs = blobstoreService.getUploads(req).get("file");
            BlobKey blobKey = blobs.get(0);

            ImagesService imagesService = ImagesServiceFactory.getImagesService();
            ServingUrlOptions servingOptions = ServingUrlOptions.Builder.withBlobKey(blobKey);
            servingOptions.secureUrl(true);
            String servingUrl = imagesService.getServingUrl(servingOptions);

            res.setStatus(HttpServletResponse.SC_OK);
            res.setContentType("text/plain");

            PrintWriter out = res.getWriter();
            out.print(servingUrl);
            out.flush();
            out.close();
    }

您还可以将自己的一些查询字符串参数添加到上传URL,该URL可以在Servlet中读取。这对于将BlobKey附加到特定实体等事情非常有用。

为了更深入地了解Blobstore,我推荐以下来自Romin Irani的App Engine教程的文章:https://rominirani.com/episode-13-using-the-blobstore-java-api-56423cf6a1b#.6t95vziul