【问题标题】:Saving blobs with Google Endpoint使用 Google Endpoint 保存 Blob
【发布时间】:2014-04-04 22:09:09
【问题描述】:

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

当前架构

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

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

    @ApiMethod(name = "saveAnimalData", httpMethod = HttpMethod.POST) 公共字符串保存动物数据(动物数据请求)抛出异常 { ... BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService(); 字符串 url = blobstoreService.createUploadUrl("/upload"); 返回网址; }

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

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

所需架构

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

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

您的回复必须是 java 格式。谢谢。

【问题讨论】:

  • 嘿!我使用与您相同的过程,但我有一个问题。在我的success_path servlet 中,getUploads(req) 方法返回一个空对象。所以我没有任何blobket 或blobServingUrl。你知道怎么了??谢谢

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


【解决方案1】:

我在这里看到两个问题:

  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 接口有一些相似之处,对我们来说这是不可能的。我们必须创建一个普通的 HTTP Servlet,并使用 Streaming Multipart 文件解析器,因为来自 Apache 的 HTTP Commons 的解析器使用了文件系统。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2014-02-16
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    相关资源
    最近更新 更多