Загружайте данные напрямую в облачное хранилище 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.