GCS удалить объект с помощью клиента Python не удаляет ресурс с помощью GET URI - PullRequest
0 голосов
/ 24 января 2019

Используя Python-клиент GCS, удаление большого двоичного объекта не вызывает никаких исключений. Но выполнение GET для только что удаленного URI все равно возвращает ресурс. Следующий код является частью одного файла приложения 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 голосов
/ 24 января 2019

Вам не нужно импортировать storage как gstorage. Вы можете следовать этой документации Удаление объектов для Python. Он также имеет ссылку на GitHub со всеми функциями для управления Blobs.

Я сам немного программировал. Вы можете увидеть пример кода на GitHub здесь . Вы перечисляете все большие двоичные объекты из блоков, используя одну функцию, и удаляете один из больших двоичных объектов, используя другую функцию. При повторном перечислении BLOB-объектов вы увидите, что BLOB-объект был успешно удален. Попытка удалить тот же самый BLOB-объект снова приведет к ошибке, что BLOB-объект не был найден. Используйте этот пример в своем коде. Когда вы попытаетесь получить URI, вы не получите объект.

...