当前位置: 首页 > 知识库问答 >
问题:

Google云存储传播

楚元章
2023-03-14

谷歌云存储中的文件更改需要多长时间才能传播?

我遇到了一个非常令人沮丧的问题,我改变了一个文件的内容,并通过gsutil重新上传,但是这个改变几个小时后才显示出来。有没有办法强制一个改变的文件立即传播所有内容?

如果我查看谷歌云存储控制台中的文件,它会看到新文件,但如果我点击公共网址,它是旧版本,在某些情况下,是2个版本前的版本。

有没有我没有设置的标题?

编辑:

我尝试了gsutil-h"Cache-Control: no-ache"cp-a public-read MyFile,但它没有帮助,但也许旧文件需要在新的无缓存版本接管之前过期?

我在文件上做了卷曲-我把这个拿回来:

HTTP/1.1 200 OK
Server: HTTP Upload Server Built on Dec 12 2012 15:53:08 (1355356388)
Expires: Fri, 21 Dec 2012 19:58:39 GMT
Date: Fri, 21 Dec 2012 18:58:39 GMT
Last-Modified: Fri, 21 Dec 2012 18:53:41 GMT
ETag: "66d820174d6de17a278b327e4c3e9b4e"
x-goog-sequence-number: 3
x-goog-generation: 1356116021512000
x-goog-metageneration: 1
Content-Type: application/octet-stream
Content-Language: en
Accept-Ranges: bytes
Content-Length: 160
Cache-Control: public, max-age=3600, no-transform
Age: 3449

这似乎表明它将在一小时后过期,尽管没有缓存。

共有1个答案

段劲
2023-03-14

谷歌云存储提供了强大的数据展示一致性:一旦写入完成,来自世界任何地方的读取将获得最新数据

但是,如果启用缓存(默认情况下,对于任何公共可读对象都是如此),则读取该对象时,可以看到与该对象上指定的缓存控件最大年龄相同的对象版本。例如,如果您上传的文件如下:

gsutil cp -a public-read file gs://my_bucket/file

你可以看到最大年龄是1小时(3600秒):

gsutil ls -L gs://my_bucket/file
gs://my_bucket/file:
    Creation time:  Fri, 21 Dec 2012 19:59:57 GMT
    Cache-Control:  public, max-age=3600, no-transform
    Content-Length: 1065
    Content-Type:   text/plain
    ETag:       eb3fb83beedf1efffe5b8e32e8d6a65a
    ...

如果要防止缓存公共可读对象,可以执行以下操作:

gsutil setmeta -h Cache-Control:no-cache gs://my_bucket/file

或者,可以在对象上设置较短的最大年龄:

gsutil setmeta -h 'Cache-Control:public, max-age=600, no-transform'

Mike Schwartz,谷歌云存储团队

 类似资料:
  • 我有一个firebase帐户,我想以编程方式上传一些照片到firebase存储。为此,我使用了google cloud java storage API。我配置权限和其他权限。我可以成功地创建桶,斑点。然而,当我试图上传一张图片时,要么它的大小为0,要么它无法下载(不生成URL)。下面是我使用的代码; 任何建议都很感激。问候。

  • 我在本地开发服务器上运行代码,但使用在项目上配置的GCS默认桶名。 Python 2.7版

  • 我正试着上传一张照片,在被croppie剪切到GCS之后。gcs write(imageToUpload)方法失败,因为imageToUpload当前不是文件,而是Blob。有没有人知道一个办法让这件事成功?可能是python中一种将BLOB转换为文件的方法吗?可以从Croppie返回的图像类型有:1)画布,2)HTML,3)BLOB和4)Base64这里是文档(Ctrl-F“result”)。任

  • 我在我创建的谷歌云存储上有一个存储桶。我想测试一些内置ACL,如public read、public read write等。但是,一旦我使用gsutil setacl命令更改了ACL,例如:

  • 我注意到谷歌云存储没有提供任何移动SDK,所以我们可以用来与存储通信,那么我们需要创建自定义API来进行通信吗?我看到有一种方法可以在现有的Firebase项目中添加额外的桶,这会在Firebase中起作用吗?或者我们有没有一种方法可以将Firebase bucket添加到谷歌云存储中?

  • 因此,我正在查看来自Google的示例代码,但我无法确定如何激活配置文件? https://cloud.google.com/appengine/docs/flexible/nodejs/using-cloud-storage 示例代码: 但是,当您阅读https://github.com/googleCloudplatform/google-cloud-node/blob/master/docs