【发布时间】:2015-03-23 20:48:33
【问题描述】:
这个论点已经在很多场合提出并解决了:Blobstore 比 DataStore 更适合存储图像。现在假设我有一个类似于 Instagram、Facebook 或 Yelp 的应用程序或任何图像密集型应用程序。在我的特殊情况下,理想的模型是
public class IdealPostModel{
Integer userId;
String synopsys;
Blob image;
...//more data/fields about the post
}
但是由于我必须使用 BlobStore,所以我的模型没有 blob,而是一个 URL 或 BlobKey。重要的问题是,要发送帖子(即将帖子保存到服务器),应用程序必须 - 按此顺序 -
- 将所有非 blob 数据发送到服务器。
- 等待服务器以
BlobstoreUtils.generateServingUrl(null)数据响应 - 将图像发送到 BlobStore
- 让 BlobStore 使用图像的 BlobKey 或 url 向我的服务器发送响应
- 将 BlobKey/url 存储在我的 DataStore 实体中
握手次数太多了!!!
有没有办法在第一步中将所有数据发送到服务器:字符串和图像。然后从那里让服务器做其他所有事情?当然,我在这里希望减少工作量。我认为 App Engine 现在应该已经相当成熟了,而且肯定有比我的架构更简单的方法。
现在我当然在这里,因为我遇到了数据已保存但 BlobKey 或 URL 未保存到实体的情况。它大约有 10% 的时间发生。或者可能更少,但感觉确实像 10%。它让我的用户发疯,这意味着它让我更发疯,因为我不想失去我的用户。
理想
- 应用在一次调用中将所有内容发送到服务器:图像和元数据,例如 userId 和 synopsys
- 服务器以某种方式从 Blobstore 获取 Blob 密钥
- 服务器将图像发送到 blobstore,以存储在提供的 blob 密钥中,服务器将其他数据发送到 DataStore,包括数据存储中的 blob 密钥。
更新
public static String generateServingUrl(String path) {
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
return blobstoreService.createUploadUrl(null == path ? "/upload" : path);
}
这是我服务器上的一个 sn-p。
【问题讨论】:
-
什么是
BlobstoreUtils.generateServingUrl(null)?我从来没有听说过。 -
是否有可能让 BlobStore 回调返回到 android 而不是我的服务器?
标签: java google-app-engine google-cloud-datastore blobstore google-eclipse-plugin