Понятное и концептуальное руководство для начинающих

Корзины S3 на Amazon — это места хранения, где вы можете хранить текстовые файлы, аудиофайлы, видеофайлы, изображения и любые другие материалы, которые вам нравятся.

S3 имеет API-интерфейсы, которые можно вызывать для выполнения всех действий, которые можно выполнить с базой данных.

1. Создание ресурса для подключения к S3

Есть два способа подключения к S3.

  1. Клиент: старая версия с более подробным кодом по сравнению с ресурсом.
  2. Ресурс: более новая версия клиента, которая предоставляет больше методов для обработки операций и менее подробных методов кодирования.

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

Вам необходимо иметь три учетных данных, упомянутых в коде. Если вы хотите создать учетную запись S3, следуйте этому учебнику.

Я буду использовать здесь уже созданную корзину в S3. Имя моего сегмента хранится в bucket_name, которое я получил из учетной записи S3. Существуют ресурсные методы для создания сегментов из Python, но для простоты я буду использовать существующий сегмент.

2. Выгрузка данных в корзину с автоматическим многокомпонентным

Если файл большой, например 1 ГБ, корзины S3 позволяют параллельным потокам одновременно загружать фрагменты файла, чтобы сократить время загрузки. Если объем данных меньше 1 ГБ, загрузку будет выполнять один поток.

Переключение между несколькими потоками и одним потоком происходит автоматически. Пороговое значение данных должно быть установлено, как указано выше, например, я использовал 1 ГБ.

Пороговое значение будет установлено вами, следовательно, вы будете корректировать его в соответствии с задачей.

Обязательные параметры:

  1. bucket_name (String): имя корзины в S3
  2. data (byte string): объект строки байтов.

Обратите внимание на название метода загрузки, его upload_fileobj(). Этот метод используется для загрузки объектов бинарного типа. Это означает, что если файл находится в вашей локальной системе, он не будет в двоичной форме. Вы должны использовать:

with open('filename', 'rb') as data:         
     s3.upload_fileobj(data, 'mybucket', 'mykey')

filename — это путь к файлу в системе. rb означает чтение и запись в двоичном формате.

Если данные извлекаются из внешнего URL-адреса, то они уже в двоичном виде, поэтому метод будет работать без каких-либо дополнительных изменений.

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

3. file_name (String): Любое имя файла. Это будет имя файла в корзине S3 и идентификатор файла. Поэтому напишите осмысленное имя.

Второстепенные параметры:

4. file_size (String/int): Размер файла, который мы хотим загрузить. В функции ProgressPercentage(file_name,file_size) тип изменяется на число с плавающей запятой, поэтому работают как строковые, так и целые числа.

5. content_type (String):тип данных; .pdf, .mp4 и т. д.

TransferConfig — это файл конфигурации, в котором:

  1. multipart_threshold: предел, выше которого активируется многопоточность.
  2. max_concurrency: количество потоков. 10 по умолчанию.
  3. multipart_chunksize: размер данных в каждом потоке.
  4. use_threads: включение потоков.

3. Просмотр содержимого сегментов

У каждого объекта в корзине есть атрибуты, которые мы можем использовать. obj.key показывает нам file_name данных, которые мы загрузили. Другие полезные атрибуты можно увидеть в официальной документации S3, ссылки приведены внизу этого руководства.

4. Последний класс с более полезными методами

Progress Percentage — это внутренний класс, предоставляемый boto3 S3. Это очень полезно при загрузке больших файлов, поскольку показывает ход загрузки. Следовательно, мы можем видеть индикатор выполнения с цифрами вместо пустого экрана.

Я изменил этот класс так, чтобы он принимал file_size в качестве входных данных, а не вычислял из самой библиотеки os. Поскольку я работал с внешним URL-адресом, мне пришлось самому указать размер файла.

Вы можете использовать класс и создавать объекты, как вам нравится, и играть с ведрами.

Вы также можете создать более одного сегмента с одним подключением, используя этот класс. Кроме того, вам не нужно закрывать соединение после загрузки/скачивания, потому что это соединение HTTP 1.1, которое автоматически закрывается через некоторое время самим boto3.

Ресурсы