我可以将图像保存到Blobstore并将数据保存到数据存储中吗?
这个论点已经被多次提出并解决了:Blobstore比DataStore更适合存储图像。 现在说我有一个类似于Instagram或Facebook或Yelp的应用程序或任何图像密集型应用程序。 在我的特殊情况下,理想模型将是
public class IdealPostModel{
Integer userId;
String synopsys;
Blob image;
...//more data/fields about the post
}
但由于我必须使用BlobStore,因此我的模型没有blob,而是使用URL或BlobKey。 重要的是要发送帖子(即将帖子保存到服务器),应用程序必须 - 按该顺序 -
BlobstoreUtils.generateServingUrl(null)
数据 这是很多握手!!!
有没有办法在第一步发送所有的数据到服务器:字符串和图像。 然后从那里有服务器做其他事情? 当然,我在这里希望减少工作量。 我认为App Engine现在必须相当成熟,并且必须比我的架构更简单。
现在我当然在这里,因为我遇到了数据保存但BlobKey或URL没有保存到实体的情况。 它约有10%的时间发生。 或者更少,但它确实感觉像10%。 这让我的用户疯狂,这意味着我不想失去用户,这让我更疯狂。
理想的情况下
更新
public static String generateServingUrl(String path) {
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
return blobstoreService.createUploadUrl(null == path ? "/upload" : path);
}
这是我的服务器上的一个片段。
您实际上可以在一个请求中发送所有内容。
请记住,当您使用通过调用blobstoreService.createUploadUrl(“/ yourservingurl”)获得的URL发送blob时,GAE实际上首先请求到另一个URL,存储blob,然后调用/ yourservingurl传递给您的blobkeys可以通过做:
Map<String, List<BlobKey>> blobs = blobstoreService.getUploads(req);
List<BlobKey> blobKeys = blobs.get("myFile");
所以实际上所有其他的表单值都会在第一次请求后丢失, 但是如果你可以动态地构建这个URL,例如
blobstoreService.createUploadUrl("/yourservingurl?param1=a¶m2=b")
那么你可以在你的Servlet中取回这些参数,并且一次性保存所有内容(包括已经存储的blob的blobkey),从而使得对数据存储的调用更少。
更新:步骤将是
1)收集客户端的所有参数,并使用这些参数创建上传URL,例如: blobstoreService.createUploadUrl("/yourservingurl?userId=989787")
。 GAE将为该特定请求生成一个唯一的URL。
当你提交表单时,GAE将坚持blob并调用/ yourservingurl
2)在Servlet serve / yourservingurl上,您将获得您上传的所有blobkeys表单文件: blobstoreService.getUploads(request)
并且您可以获取标准request.getParameter("userId")
包含的参数
3)现在在你的servlet中你有所有你发送的参数(例如userId)和blobkey,你可以在一次调用中保留你的Post对象。
工作流程不同。 以你的榜样为例:
在新帖子的表单下有“发布”按钮和“附加图片”按钮。
当用户点击附加按钮时,您要求用户选择一个文件并将其保存到BlobStore(或Google云端存储)。 无需调用BlobstoreUtils.generateServingUrl(null)
- 您需要获取上传URL。 当一个调用返回一个键时,你将它存储在Post对象中。
当用户点击“发布”按钮时,可以将帖子 - 包括图像键(键)保存到数据存储区中。 因此,整个工作流程只需要两个电话。
如果用户点击取消按钮 - 记得删除上传的图像(如果有的话),或者他们将成为孤儿。 棘手的部分是如果用户只是离开了你的应用程序或丢失了连接,就要删除这些图像。
如果你愿意,你可以逆转这个过程 - 先保存文章,然后让用户附上图片。 这不是大多数用户所期望的,但它解决了孤立图像的问题。
链接地址: http://www.djcxy.com/p/67465.html上一篇: Can I save images to Blobstore and save data to Datastore in one trip?
下一篇: GAE datastore admin copy failing on MapReduce model to JSON conversion