我正在尝试使用下面的代码使用curl将图像上传到blobstore,并且出现以下错误“必须从blob上传回调请求中调用”。
但是,如果我将表单与操作一起使用,则会上传:
blobstoreService.createUploadUrl("/upload")
=== Servlet代码===
public class Upload extends HttpServlet {
private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
@SuppressWarnings("deprecation")
@Override
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(req);
BlobKey blobKey = blobs.get("myFile");
}
}
有谁知道我如何将“ blobstoreService.createUploadUrl(“ / upload”)“合并到servlet中,以便我可以像这样执行curl请求:
curl -XPOST http://localhost:8888/upload -F "[email protected]"
我正在使用Google开发人员页面上的以下示例:
https://developers.google.com/appengine/docs/java/blobstore/
最佳答案
Blobstore的工作方式如下:
您请求一个URL进行上传(提供一些资源)。
客户端使用该URL进行发布(这意味着请求将发送到Blobstore服务器,而不是您的应用程序)。
Blobstore服务器接收数据,将其保存,然后将请求转发到您的应用程序。
您获得了密钥并运行您的代码,然后返回到客户端。
我要说的是,您必须让Blobstore来完成它的工作,这意味着您不能使用固定的URL进行上传,必须首先请求发布URL。这就是系统的设计方式。
因此,您必须进行2次curl
调用,一次调用以请求url,然后使用该URL进行发布,而没有其他方法。
当然,它不是那么性感或简单,但是其他解决方案将变得复杂甚至昂贵。
关于java - Google Blobstore使用curl POST添加,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25595497/