使用python客户端的GCS删除对象不会使用GET uri删除资源

时间:2019-01-24 05:22:41

标签: python google-cloud-storage google-cloud-python

使用GCS python客户端,删除blob不会引发任何异常。但是,对刚刚删除的URI执行GET仍会返回资源。以下代码是单个文件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:])

请注意,该对象是使用Cache-Control: public, max-age=9999999标头创建的,并且在元数据中也已公开且不可恢复。

执行后,没有错误,但是获取以存储桶URI为前缀的完整URI仍会返回该对象。我对这些方法的实际使用感到困惑吗?还是API需要花费一些时间才能将其从网络中删除?还是其他?

1 个答案:

答案 0 :(得分:0)

您不必将storage导入为gstorage。您可以按照Python的Deleting Objects文档进行操作。它还具有指向GitHub的链接,其中包含用于管理Blobs的所有功能。

我做了一些自我编码。您可以看到example code on GitHub here。您可以使用一个功能列出存储桶中的所有blob,然后使用另一功能删除其中一个blob。再次列出Blob时,您会看到Blob已成功删除。再次尝试删除相同的Blob,将导致您找不到该Blob的错误。在您的代码中使用此示例,当您尝试获取URI时,不会获得该对象。