我有一个SPI Google端点,我找不到任何用于接受例如MultipartFile file
的注释的示例?
@ApiMethod(name = "saveNewBill" ,
httpMethod = ApiMethod.HttpMethod.POST)
public Bill saveBillImage( @Named("content") MultipartContent f ){
Bill bill = new Bill();
return bill;
}
答案 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