GAE Python GCS 文件名访问旧文件
GAE Python GCS filename accesses old file
在我的 GAE Python 应用程序中,我正在编写代码以在 GCS 中存储图像。
我写的图片如下:
bucket_name = os.environ.get(u'BUCKET_NAME', app_identity.get_default_gcs_bucket_name())
filename = u'/{}/{}/image'.format(bucket_name, str(object.key.id()))
mimetype = self.request.POST[u'image_file'].type
gcs_file = cloudstorage.open(filename, 'w', content_type=mimetype,
options={'x-goog-acl': 'public-read'})
gcs_file.write(self.request.get(u'image_file'))
gcs_file.close()
我第一次使用此代码写入特定文件名时,我可以使用文件名访问该文件:
https://storage.googleapis.com/<app>.appspot.com/<id>/image
我还可以在 GCS 存储浏览器上单击名称 "image" 并查看图像。
耶!这一切似乎都有效。
但是当我将不同的图像上传到相同的文件名时,会发生一些令人困惑的事情:当我在浏览器中显示文件名时,无论是通过 标签还是作为单独的浏览器选项卡中的 URL , 显示旧图像。 但是当我通过 GCS 存储浏览器显示 "image" 时,它显示了新图像。
顺便说一句,作为一个额外的数据点,虽然我在打开文件进行写入时指定了 public-read
,但在 GCS 存储浏览器页面上该文件的 "shared publicly" 列是空白的。
我尝试删除 open
语句之前的文件,即使 w
应该作为覆盖,但它没有任何区别。
任何人都可以解释文件名如何继续访问文件的旧版本,即使 GCS 存储浏览器显示新版本,更重要的是,我需要做什么才能使文件名访问新版本?
编辑:
继续研究这个问题,我在https://cloud.google.com/storage/docs/accesscontrol找到了如下语句:
If you need to ensure that updates become visible immediately, you should set
a Cache-Control header of "Cache-Control:private, max-age=0, no-transform" on
such objects.
但是,我看不到如何使用 Cloudstorage "open" 命令或从我的 Python 程序以任何其他方式执行此操作。因此,如果这是解决方案,有人可以告诉我如何为我正在创建的这些图像文件设置 Cache-Control header 吗?
下面是一个打开设置缓存控制的例子:
with gcs.open(new_zf.gcs_filename, 'w', content_type=b'multipart/x-zip',
options={b'x-goog-acl': b'public-read', b'cache-control': b'private, max-age=0, no-cache'}) as nzf:
在我的 GAE Python 应用程序中,我正在编写代码以在 GCS 中存储图像。
我写的图片如下:
bucket_name = os.environ.get(u'BUCKET_NAME', app_identity.get_default_gcs_bucket_name())
filename = u'/{}/{}/image'.format(bucket_name, str(object.key.id()))
mimetype = self.request.POST[u'image_file'].type
gcs_file = cloudstorage.open(filename, 'w', content_type=mimetype,
options={'x-goog-acl': 'public-read'})
gcs_file.write(self.request.get(u'image_file'))
gcs_file.close()
我第一次使用此代码写入特定文件名时,我可以使用文件名访问该文件:
https://storage.googleapis.com/<app>.appspot.com/<id>/image
我还可以在 GCS 存储浏览器上单击名称 "image" 并查看图像。
耶!这一切似乎都有效。
但是当我将不同的图像上传到相同的文件名时,会发生一些令人困惑的事情:当我在浏览器中显示文件名时,无论是通过 标签还是作为单独的浏览器选项卡中的 URL , 显示旧图像。 但是当我通过 GCS 存储浏览器显示 "image" 时,它显示了新图像。
顺便说一句,作为一个额外的数据点,虽然我在打开文件进行写入时指定了 public-read
,但在 GCS 存储浏览器页面上该文件的 "shared publicly" 列是空白的。
我尝试删除 open
语句之前的文件,即使 w
应该作为覆盖,但它没有任何区别。
任何人都可以解释文件名如何继续访问文件的旧版本,即使 GCS 存储浏览器显示新版本,更重要的是,我需要做什么才能使文件名访问新版本?
编辑:
继续研究这个问题,我在https://cloud.google.com/storage/docs/accesscontrol找到了如下语句:
If you need to ensure that updates become visible immediately, you should set
a Cache-Control header of "Cache-Control:private, max-age=0, no-transform" on
such objects.
但是,我看不到如何使用 Cloudstorage "open" 命令或从我的 Python 程序以任何其他方式执行此操作。因此,如果这是解决方案,有人可以告诉我如何为我正在创建的这些图像文件设置 Cache-Control header 吗?
下面是一个打开设置缓存控制的例子:
with gcs.open(new_zf.gcs_filename, 'w', content_type=b'multipart/x-zip',
options={b'x-goog-acl': b'public-read', b'cache-control': b'private, max-age=0, no-cache'}) as nzf: