1

我正在尝试实现一个非常基本的功能,将图像从 Android、iPhone 和网络客户端上传到谷歌应用引擎。感谢这个博客,我做了一个初始版本的实现:

然而,上传图像似乎总是有一个两步过程:

  1. 使用 createUploadUrl() 获取要 POST 的初始上传 URL。我附上了我使用的代码片段:
    公共类 CreateUploadUrl 扩展 HttpServlet {

    @覆盖
    public void doGet(HttpServletRequest req, HttpServletResponse resp) 抛出 IOException {
        BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
        String uploadURL = blobstoreService.createUploadUrl("/image/uploadImage");
        resp.setContentType("text/plain");
        resp.getWriter().println(uploadURL);
    }
}

  1. 使用您刚刚“获得”的 URL 发布图像
    公共无效doPost(HttpServletRequest req,HttpServletResponse res)抛出ServletException,IOException {
        BlobKey blobKey = ParameterExtractor.getBlobParameter(req, "blob-key", blobstoreService);
        如果(blobKey == null){
            log.info("blob ID 为空。POST 失败");
        } 别的 {
            log.info("ze 业务逻辑");
        }
    }

我的问题是是否可以一步完成,因为现在所有客户端都需要执行 http GET 来获取上传 URL,然后执行 http POST 来发布图像。

不可能只用预定义的 URL 做一个 Http POST。

谢谢拉贾特

4

2 回答 2

1

这是可能的,但有限制。您可以绕过 UploadUrl 机制,方法是使用(当前实验性的)createNewBlobFile API 直接在您的 servlet 中创建 blob。在您的移动应用程序中创建一个编码为 multipart/form-data 的 HTTP 请求,并教您的 servlet 如何解码这样的东西(请参阅如何在 JSP/Servlet 中上传文件?)。请注意,HTTP 请求限制为 32MB;使用表单编码,您可以上传的二进制数据量将少于此数量。

于 2012-06-05T20:46:17.063 回答
0

当然,您可以使用单个 POST 来完成。例如,您有一个具有 id 的用户。该用户选择图像,您在客户端发送 POST 图像数据和用户数据。

在服务器端 (GAE) 上,您有用于图像上传 (your_host/imageUpload) 的 url 以及从请求中读取数据并将其写入 Blobstore 的服务器或 Spring 控制器。

于 2012-06-05T09:45:22.913 回答