代码之家  ›  专栏  ›  技术社区  ›  androidguy

gcs使用python客户端删除对象不使用get-uri删除资源

  •  0
  • androidguy  · 技术社区  · 6 年前

    使用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 头,也在元数据中公开和不可恢复。

    执行之后,没有错误,但是获取以bucket uri为前缀的完整uri仍然返回对象。我是否对这些方法的实际使用感到困惑?或者API是否需要一些时间将其从其网络中删除?或者,其他什么?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Andrei Cusnir    6 年前

    您不必导入 storage 作为 gstorage . 你可以跟着这个走 Deleting Objects python的文档。它还有一个到Github的链接,其中包含所有用于管理的功能 Blobs .

    我自己做了一点编码工作。你可以看到 example code on GitHub here . 使用一个函数列出桶中的所有blob,使用另一个函数删除其中一个blob。再次列出blob时,您将看到blob已成功删除。再次尝试删除同一个blob会导致错误,即找不到该blob。在代码中使用这个示例,当您尝试获取URI时,将无法获取对象。