我认为使用blobstore存储图像的过程以保存数据存储区中的blob键结束。 所以在下面的代码中,应该在我的后端,为什么我需要一个重定向URL,因为我已经有了blob密钥? 为什么我不只是将blob密钥保存在我的数据存储区中然后将其返回?
public class Upload extends HttpServlet {
private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(req);
BlobKey blobKey = blobs.get("myFile");
if (blobKey == null) {
res.sendRedirect("/");
} else {
res.sendRedirect("/serve?blob-key=" + blobKey.getKeyString());
}
}
}
此代码来自教程:https://developers.google.com/appengine/docs/java/blobstore/overview#Complete_Sample_App
答案 0 :(得分:5)
因为Google将图像存储在不同的服务上(Picassa也使用)。 目标是优化存储并为开发人员提供一些工具来轻松操作这些图像。
请参阅文档中的此参考,以了解您可以执行的操作: https://developers.google.com/appengine/docs/java/images/overview
要避免重定向,您应该使用此方法来提供图像: getServingUrl()
来自文档:
getServingUrl()方法允许您生成稳定的,专用的 用于提供适合Web的图像缩略图的URL。你只需存储一个 在Blobstore中单个副本的原始图像,然后请求一个 高性能的每图像URL。此特殊网址可以投放该图片 自动调整大小和/或裁剪,并从此URL提供服务 不会在您的应用程序上产生任何CPU或动态服务负载(但是 带宽仍然照常收费)。图像以低价提供 来自高度优化的无cookie基础架构的延迟。