我正在尝试实现一个非常基本的功能,将图像从 Android、iPhone 和网络客户端上传到谷歌应用引擎。由于 this,我做了一个初始版本的实现博客:
然而,上传图片似乎总是需要两步:
- 使用 createUploadUrl() 获取要 POST 的初始上传 URL。我附上了我使用的代码 fragment :
public class CreateUploadUrl extends HttpServlet { @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService(); String uploadURL = blobstoreService.createUploadUrl("/image/uploadImage"); resp.setContentType("text/plain"); resp.getWriter().println(uploadURL); } }
- 使用您刚刚“获得”的 URL 发布图片
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { BlobKey blobKey = ParameterExtractor.getBlobParameter(req, "blob-key", blobstoreService); if (blobKey == null) { log.info("blob Id is null. POST failed"); } else { log.info("ze business logic"); } }
我的问题是是否可以一步完成,因为现在所有客户端都需要执行 http GET 以获取上传 URL,然后执行 http POST 以发布图像。
是不是只用一个预定义的 URL 做一个 Http POST 是不可能的。
谢谢 拉惹
最佳答案
这是可能的,但有限制。您可以通过使用(目前处于试验阶段)createNewBlobFile 在您的 servlet 中直接创建 blob 来绕过 UploadUrl 机制。应用程序接口(interface)。在您的移动应用程序中创建一个编码为 multipart/form-data 的 HTTP 请求,并教您的 servlet 如何解码此类内容(请参阅 How to upload files in JSP/Servlet?)。请注意 HTTP 请求是 limited to 32MB ;使用表单编码,您可以上传的二进制数据量将少于此。
关于java - 使用谷歌应用引擎上传图片的一步上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10894895/