【问题标题】:google cloud storage - getServingUrl() giving URL of old image谷歌云存储 - getServingUrl() 提供旧图像的 URL
【发布时间】:2016-06-07 05:28:52
【问题描述】:

我正在 GCS 上上传图像,然后用具有相同文件名 (image.png) 的不同图像覆盖它。在 GCS 浏览器中,我可以看到图像被覆盖(不同的大小、时间戳)但是当我尝试使用 getServingUrl() 获取图像的 URL 时,我得到了我第一次上传的图像的 URL!!!

如果我添加一个具有新文件名 (image2.png) 的图像,那么我会得到一个新 URL。如果我用另一个图像覆盖此图像(保持名称为 image2.png),那么我将再次获得原始 image2.png 的 URL。

这是我的代码:

String bucketName = "my_bucket_name";
    String userFileName = "image.png";
    try {
        GcsFileOptions instance = GcsFileOptions.getDefaultInstance();
        GcsFilename fileName = new GcsFilename(bucketName, userFileName);// getFileName(request);
        GcsOutputChannel outputChannel;
        gcsService.delete(fileName);
        outputChannel = gcsService.createOrReplace(fileName, instance);
        copy(request.getInputStream(), Channels.newOutputStream(outputChannel));
    } catch (IOException e) {
        System.out.println(e.getMessage());
    }

    ImagesService imagesService = ImagesServiceFactory.getImagesService();

    String url = imagesService.getServingUrl(ServingUrlOptions.Builder.withGoogleStorageFileName("/gs/" +
            bucketName + "/" + userFileName).secureUrl(true));

谁能告诉我我在这里缺少什么?如何让 ImagesService 给我新上传图片的句柄?谢谢。

【问题讨论】:

标签: google-app-engine google-cloud-storage google-cloud-platform


【解决方案1】:

这是意料之中的。该对象可以缓存在您无法控制的任何中间代理服务器中。因此,设置缓存控制标头也可能无法解决问题。

上传文件时,您可以使用文件的 md5hash 作为名称,而不是使用文件名保存它。这将确保如果文件内容发生变化,您将拥有不同的 md5hash。使用这种方法,您还可以使用缓存控制标头,它会加快网页的加载速度

【讨论】:

  • 猜你是对的。使用哈希值或任何唯一名称似乎是正确的方法。非常感谢。
【解决方案2】:

正如 java_geek 指出的那样,你可能遇到了一个已知的 App Engine 错误:https://code.google.com/p/googleappengine/issues/detail?id=11381

如果您希望始终提供实时版本的 GCS 对象,并且不需要 App Engine 图像服务的任何特殊属性,则可以创建对象,并将“cacheControl”属性设置为“no -cache”,然后通过此 URL 链接到它们:

http(s)://storage.googleapis.com/bucket_name/object_name

这将直接从 GCS 提供图像。

【讨论】:

  • 不,这没有帮助。我按照您的建议给了 cacheControl("private") ,并在另一台机器上进行了测试,这样如果是由于浏览器造成的问题,它就会得到解决。它仍然提供相同的 URL。我正在 Postman 中进行测试,它也提供了相同的 URL。
  • 有趣。如果您通过提供类似 'storage.googleapis.com/bucket_name/object_name" 的 URL 直接从 GCS 提供它会怎样?
  • 哦,有趣!我会修改我的回复。
猜你喜欢
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 2021-09-20
  • 2015-02-20
  • 1970-01-01
  • 1970-01-01
  • 2020-09-10
  • 1970-01-01
相关资源
最近更新 更多