Загружайте данные напрямую в облачное хранилище Google - PullRequest
0 голосов
/ 03 октября 2018

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

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

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

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

Спасибо,

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Насколько я понимаю, вы ищете другую технику, кроме 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 - это имя настроенной корзины вашего приложения и object будучи объектом, который вы хотите сохранить (вы можете найти информацию для вашего имени группы в консоли GCP).Кроме того, отличительной особенностью GCS-контейнеров является то, что вы можете буквально хранить в них все, что вы хотите (то есть: нет необходимости указывать то, что вы храните или кодировать что-либо перед сохранением).

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

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

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

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

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

0 голосов
/ 03 октября 2018

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

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

...