我正在尝试使用下面的代码使用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/

10-10 23:31