为什么blobstore上传代码有重定向url

时间:2013-04-27 20:15:43

标签: android google-app-engine blobstore google-cloud-endpoints

我认为使用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

1 个答案:

答案 0 :(得分:5)

因为Google将图像存储在不同的服务上(Picassa也使用)。 目标是优化存储并为开发人员提供一些工具来轻松操作这些图像。

请参阅文档中的此参考,以了解您可以执行的操作: https://developers.google.com/appengine/docs/java/images/overview

要避免重定向,您应该使用此方法来提供图像: getServingUrl()

来自文档:

  

getServingUrl()方法允许您生成稳定的,专用的   用于提供适合Web的图像缩略图的URL。你只需存储一个   在Blobstore中单个副本的原始图像,然后请求一个   高性能的每图像URL。此特殊网址可以投放该图片   自动调整大小和/或裁剪,并从此URL提供服务   不会在您的应用程序上产生任何CPU或动态服务负载(但是   带宽仍然照常收费)。图像以低价提供   来自高度优化的无cookie基础架构的延迟。