我有一个应用程序,允许用户在 blobstore 中保存 blob。我目前有一个这样做的模式,但我对更简单、更少扭曲的东西感兴趣。对于上下文,假设我的应用程序允许用户上传动物的图片,并附上描述动物正在做什么的段落。
呈现模式
用户调用我的端点 api 来保存paragraph
and name
实体中的动物Animal
. Note: The Animal
实体实际上有 4 个字段(name
, paragraph
, BlobKey
, and blobServingUrl
作为字符串)。但端点 api 只允许保存提到的两个。
-
在端点方法内,在应用程序引擎端,保存后name
and paragraph
我进行以下调用来生成 blob 服务 url,我的端点方法将其返回给调用者
@ApiMethod(name = "saveAnimalData", httpMethod = HttpMethod.POST)
公共字符串saveAnimalData(AnimalData请求)抛出异常{
...
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
String url = blobstoreService.createUploadUrl("/upload");
返回网址;
}
在 Android 端,我使用普通的 http 调用将图像的 byte[] 发送到 blobstore。我使用阿帕奇DefaultHttpClient()
. Note:保存图像后,blobstore 使用 blob 键和服务 url 调用我的应用程序引擎服务器
我使用普通的 java servlet 从 blobstore(blobstore 称为我的回调 url)读取响应,即public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
。从 servlet 中,我把BlobKey
and blobServingUrl
进入Animal
相关动物的实体。 (我已将一些元数据传递到 blobstore,我将其用作标记来识别相关的动物实体)。
所需的模式
这就是您的回复的来源。重要的是,我想消除 java servlet,并将我的整个 api 限制为谷歌云端点。所以我的问题是:我将如何使用我的端点来执行步骤 3 和 4?
所以想法是将图像字节发送到端点方法saveAnimalData
在我发送的同时paragraph
and name
数据。然后在端点方法中,将图像发送到 blobstore,然后持久化BlobKey
and blobServingUrl
在我的实体中Animal
.
您的回复必须是 java 格式。谢谢。
我在这里看到两个问题合二为一:
Google Cloud Endpoints 可以处理多部分文件吗? ->我不知道这个TBH
有没有比使用更简单的过程来存储 blobBlobStoreService https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/blobstore/BlobstoreService?
这取决于您的图像的大小。如果您将用户限制为 Blob你的财产Animal
实体。它可以让你绕过BlobStoreService
管道工。看 :https://developers.google.com/appengine/docs/java/datastore/entities?hl=FR 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,并使用流式多部分文件解析器,因为 Apache 的 HTTP Commons 中的文件解析器使用文件系统。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)