默认情况下,Google Cloud Storage bucket 在使用 Python 库上传时已停止覆盖文件



我有一个每周运行的 App Engine cron 作业,将一个名为logs.json的文件上传到 Google Cloud Storage 存储桶。

在过去的几个月中,每次上传新版本时都会覆盖此文件。

在过去的几周内,没有覆盖文件,而是保留了现有副本,并以不同的名称上传了新副本,例如logs_XHjYmP3.json.

这是执行上传的 Django 存储类的简化片段。我已经在上传时验证了文件名是否正确:

# Prints 'logs.json'
print(file.name)
blob.upload_from_file(file, content_type=content_type)
blob.make_public()

阅读文档,它说:

上传到现有 Blob 的效果取决于 在 Blob 存储桶上定义的"版本控制"和"生命周期"策略。在 如果没有这些策略,上传将覆盖任何现有的 内容。

存储桶的版本控制设置为已挂起,我不知道任何其他设置或我所做的任何更改会影响这一点。

如何使文件上传覆盖任何同名的现有文件?

经过进一步的测试,虽然print(file.name)看起来是正确的,但不正确的文件名实际上来自 Django 的get_available_name()存储类方法。如果文件已经存在,该方法会尝试生成唯一的文件名。我已将该方法添加到我的自定义存储类中,如果文件符合条件,则只需返回现有名称以允许其覆盖。但是,我仍然不确定为什么它开始这样做。

最新更新