Загружайте данные напрямую в облачное хранилище Google

Я хочу загрузить данные из приложения / команды python (например, для youtube-dl или любой другой библиотеки, загружаемой из стороннего URL) непосредственно в облачное хранилище Google (Bucket).

Я использовал команду gsutil stream для потоковой передачи данных непосредственно из процесса в gcs, но он сохраняет только консольный вывод в корзину

Также я не хочу монтировать хранилище, потому что хочу поделиться этим хранилищем с распределенной системой

Есть ли способ, которым я могу скачать его, не загружая сначала в файловую систему, а затем скопировать его в облачное хранилище Google?

Спасибо,

2 ответа

Решение

Ситуация, которую вы описываете, не представляется возможной: просмотр документации и исходного кода для библиотеки Cloud Storage в Python оставит вам только 3 варианта: загрузить из файла (уже на вашем диске), загрузить, указав имя файла (путь к файл уже на вашем диске) и загрузить из строки (загрузить текст в виде TXT-файла).

Вам нужно будет загрузить файл из любой упомянутой вами программы (как указано в комментариях, вы можете загрузить ее во временную папку), загрузить файл в GCS и затем удалить его из вашей временной папки.

Из того, что я понимаю, вы ищете другую технику, кроме gsutil stream, для хранения в вашем ведре напрямую. Учитывая, что у вас уже есть командное приложение Python. У вас есть несколько вариантов для достижения вашей цели:

Вариант 1. Сохраните ваши данные в переменной Python, а затем вставьте их в корзину с помощью плагина клиентской библиотеки boto (который использует Python: 2.6.x и 2.7.x)

Документация Google здесь описывает идею использования boto в Python (плюс примеры использования).

Тем не менее, здесь приведена копия этой ссылки с кратким описанием.

загрузить:

dst_uri = boto.storage_uri (+ '/' +, 'gs') dst_uri.new_key (). set_contents_from_stream ()

скачать:

import sys src_uri = boto.storage_uri (+ '/' +, 'gs') src_uri.get_key (). get_file (sys.stdout)

Где: bucket - это имя корзины вашего приложения, которое вы настроили, а объект - это объект, который вы хотите сохранить (информацию о вашем имени корзины можно найти в консоли GCP). Кроме того, отличительной особенностью GCS-контейнеров является то, что вы можете буквально хранить в них все, что вы хотите (то есть: нет необходимости указывать то, что вы храните или кодировать что-либо перед сохранением).

Вариант 2. Храните свои данные с помощью клиентских библиотек Google Cloud Storage. Чтобы быть более точным, функциональность, которую вы ищете в вашей ситуации, это загрузка объектов с помощью BLOB- объектов. (вы можете хранить любую форму данных внутри BLOB-объекта)

Так как вы не хотите сохранять локально и хранить прямо в вашем ведре. Я бы порекомендовал использовать следующий метод:

upload_from_string (data, content_type = 'text / plain', client = None, redefined_acl = None)

(Определение Google: загрузить содержимое этого блоба из предоставленной строки)

Важно отметить, что в этом методе вы можете указать, какой тип данных вы хотите сохранить. В зависимости от того, что вы пытаетесь сохранить (библиотеки, загружаемые из сторонних URL), вы можете выбрать между str или bytes. Тем не менее, я бы рекомендовал сначала попробовать байты, так как он допускает символы ASCII.

Другие вопросы по тегам