GCS delete object using python 客户端不使用 GET uri 删除资源

GCS delete object using python client doesn't remove the resource using GET uri

使用 GCS python 客户端,删除 blob 不会引发任何异常。但是对刚刚删除的URI执行GET,资源还是returns。以下代码是单文件 Flask 应用程序的一部分。

from google.cloud import storage as gstorage
storage_client = gstorage.Client()
storage_bucket = storage_client.get_bucket(app.config['STORAGE_BUCKET'])
@bp.route('/verify', methods=['POST'])
def post_verification_photo():
    ...
    crs.execute('SELECT uri FROM photo WHERE id=%s', (photoId,))
    photoUri = crs.fetchone()[0]
    storage_bucket.delete_blob(photoUri[photoUri.rindex('/')+1:])

请注意,object 是使用 Cache-Control: public, max-age=9999999 header 创建的,并且在元数据中也是 public 和 non-resumable。

执行后没有报错,但是GETting以bucket URI为前缀的full URI还是returns object。我对这些方法的实际使用感到困惑吗?还是 API 需要一些时间才能将其从他们的网络中删除?或者,还有别的吗?

您不必将 storage 导入为 gstorage。您可以按照 Python 的 Deleting Objects 文档进行操作。它还具有 link 到 GitHub 以及管理 Blobs.

的所有功能

我自己编写了一些代码。你可以看到example code on GitHub here。您使用一个函数列出存储桶中的所有 blob,然后使用另一个函数删除其中一个 blob。再次列出 blob 时,您将看到 blob 已成功删除。尝试再次删除同一个 blob 将给出一个错误,指出找不到该 blob。在您的代码中使用此示例,当您尝试获取 URI 时,您将无法获取对象。