Установите метаданные в Google Cloud Storage с помощью gcloud-python

Я пытаюсь загрузить файл в Google Cloud Storage с помощью gcloud-python и установить некоторые настраиваемые свойства метаданных. Чтобы попробовать это, я создал простой скрипт.

import os

from gcloud import storage

client = storage.Client('super secret app id')
bucket = client.get_bucket('super secret bucket name')

blob = bucket.get_blob('kirby.png')
blob.metadata = blob.metadata or {}
blob.metadata['Color'] = 'Pink'
with open(os.path.expanduser('~/Pictures/kirby.png'), 'rb') as img_data:        
    blob.upload_from_file(img_data)

Я могу загрузить содержимое файла. После загрузки файла я могу вручную установить метаданные из консоли разработчика и получить их.

Я не могу понять, как программно загрузить метаданные.


person Remco Haszing    schedule 15.10.2015    source источник


Ответы (1)


Мы обсудили проблему в средстве отслеживания проблем, и в реализации обнаружилась «ошибка», или, по крайней мере, то, что застает пользователей врасплох.

Доступ к metadata через blob.metadata доступен только для чтения. Таким образом, при изменении этого результата с помощью

blob.metadata['Color'] = 'Pink'

фактически он не меняет метаданные, хранящиеся на blob.

Текущее «исправление» состоит в том, чтобы просто накапливать

metadata = {'Color': 'Pink'}
blob.metadata = metadata
person bossylobster    schedule 24.10.2015
comment
Я пытаюсь создать и загрузить большой двоичный объект с метаданными Content-Disposition во вложение. Я пробовал передать его, используя приведенный выше код, но, похоже, он не работает. Любая помощь горячо приветствуется. - person Joe Rivera; 10.02.2020
comment
После установки метаданных, как показано здесь, вы должны вызвать blob.patch(). Тогда это отлично работает для меня. - person Tanner; 03.04.2020
comment
@JoeRivera, возможно, blob.content_disposition = 'form-data' решит вашу проблему. Делая это непосредственно против blob вместо использования атрибута метаданных. - person vperezb; 07.04.2020