java - 使用 Google Endpoint 保存 blob

标签 java google-app-engine google-cloud-datastore google-cloud-endpoints blobstore

我有一个允许用户在 blobstore 中保存 blob 的应用程序。我有一个目前这样做的模式,但我对更简单、更少扭曲的东西感兴趣。对于上下文,假设我的应用程序允许用户上传动物图片,并用一段描述动物正在做什么。

当前架构

  1. 用户调用我的端点 api 以将动物的 paragraphname 保存在实体 Animal 中。 注意:Animal 实体实际上有 4 个字段(nameparagraphBlobKeyblobServingUrl 作为字符串)。但是端点 api 只允许保存提到的两个。

  2. 在端点方法中,在应用程序引擎端,在保存 nameparagraph 之后,我进行以下调用以生成一个 blob 服务 url,这是我的端点方法返回给调用者

    @ApiMethod(name = "saveAnimalData", httpMethod = HttpMethod.POST) public String saveAnimalData(AnimalData request) 抛出异常{ ... BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService(); String url = blobstoreService.createUploadUrl("/upload"); 返回网址;

  3. 在 android 端,我使用普通的 http 调用将图像的 byte[] 发送到 blobstore。我使用 apache DefaultHttpClient()注意:保存图片后,blobstore 会使用 blob key 和服务 url 调用我的应用引擎服务器

  4. 我使用普通的 java servlet 从 blobstore(blobstore 称为我的回调 url)读取响应,即 public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException。在 servlet 中,我将 BlobKeyblobServingUrl 放入相关动物的 Animal 实体中。 (我已经将一些元数据传递到 blobstore,我将其用作标记来识别相关的动物实体)。

所需架构

这就是您的回应所在。重要的是,我想消除 java servlet 并将我的整个 api 限制为谷歌云端点。所以我的问题是:我将如何使用我的端点来执行步骤 3 和 4?

所以我的想法是在发送 paragraphname 的同时将图像字节发送到端点方法 saveAnimalData > 数据。然后在端点方法中,将图像发送到 blobstore,然后将 BlobKeyblobServingUrl 保存在我的实体 Animal 中。

您的回复必须使用 Java。谢谢。

最佳答案

我在这里看到两个问题合二为一:

  1. Google Cloud Endpoints 可以处理多部分文件吗? -> 我不知道这个 TBH

  2. 有没有比使用 BlobStoreService 更简单的存储 blob 的过程? ?

这取决于您的图片大小。如果您将用户限制为 < 1MB 的文件,您可以将图像存储为 Animal 实体的 Blob 属性。它将允许您绕过 BlobStoreService 管道。请参阅:https://developers.google.com/appengine/docs/java/datastore/entities?hl=FR

此解决方案仍然取决于 Cloud Endpoint 如何将多部分文件作为原始 byte[]...

我们在 2009 年遇到了 GWT + Google App Engine 的相同问题,那是在 BlobStoreService 可用之前。

GWT RPC 和 Cloud Endpoints 接口(interface)有一些相似之处,对我们来说这是不可能的。我们必须创建一个普通的 HTTP Servlet,并使用流式多部分文件解析器,因为来自 Apache 的 HTTP Commons 的解析器使用了文件系统。

关于java - 使用 Google Endpoint 保存 blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22153910/

相关文章:

java - 将整数表示法转换为 RGB 表示法?

python - 如何自动将测试数据加载到 AppEngine 中?

google-app-engine - 将索引添加到已存在于 Google App Engine 数据存储区中的实体属性

java - App Engine DataStore - 复合索引 - 数据存储索引 - 不起作用

java - Spring 数据 - JPA,缺少 ID

java - 使用 Java 访问 HTML5 Localstorage

google-app-engine - ndb/Google App Engine 上的简单版本/历史记录

google-cloud-datastore - 如何在 Django-nonrel 中为 Google App Engine 设置组权限

php - 如何使用 php 访问谷歌云数据存储?

java - 在 Spring 中销毁的 Session 上调用 Listener 类中的服务层函数