Перейти к содержанию

Работа с файлами в AWS-хранилищах

Настройка

Система может работать с файлами, размещёнными на s3-хранилище, для этого необходимо настроить

Инструкцию по созданию статических ключей доступа для Yandex Cloud Object Storage можно найти в документации

S3Client

Для импорта и экспорта файлов используйте сервис planiqum.core.services.s3_service.S3Client

Класс S3Client предоставляет методы для работы с Yandex Object Storage через интерфейс S3. Основные функции включают загрузку, скачивание и получение списка объектов в бакете.

Инициализация клиента

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

from planiqum.core.services.s3_service import S3Client

s3_client = S3Client()

upload_file

Загружает файл в указанный бакет.

Параметры:

  • path_to_file_local: Путь к локальному файлу.
  • path_to_file_bucket: (опционально) Путь в бакете, куда будет загружен файл. Если не указан, файл загружается в корень.
  • bucket_name: (опционально) Имя бакета. Если не указано, используется значение из settings.AWS_STORAGE_BUCKET_NAME.

Пример использования:

s3_client.upload_file(
    path_to_file_local="./data/report.csv",
    path_to_file_bucket="reports/2024",
    bucket_name="my_bucket"
)

download_file

Скачивает файл из указанного бакета.

Параметры:

  • path_to_file_bucket: Путь к файлу в бакете.
  • path_to_file_local: Локальный путь для сохранения файла.
  • bucket_name: (опционально) Имя бакета. Если не указано, используется значение из settings.AWS_STORAGE_BUCKET_NAME.

Пример использования:

s3_client.download_file(
    path_to_file_bucket="reports/2024/report.csv",
    path_to_file_local="./downloads/report.csv",
    bucket_name="my_bucket"
)

list_objects

Возвращает список файлов в указанной директории бакета.

Параметры:

  • bucket_name: (опционально) Имя бакета. Если не указано, используется значение из settings.AWS_STORAGE_BUCKET_NAME.
  • directory: (опционально) Директория в бакете, файлы из которой нужно получить. Если не указано, возвращаются файлы из корня бакета.

Пример использования:

files = s3_client.list_objects(
    bucket_name="my_bucket",
    directory="reports/2024"
)

download_files

Скачивает несколько файлов из указанной директории бакета.

Параметры:

  • bucket_name: (опционально) Имя бакета. Если не указано, используется значение из settings.AWS_STORAGE_BUCKET_NAME.
  • bucket_dir: (опционально) Директория в бакете, файлы из которой нужно скачать. Если не указано, скачиваются файлы из корня бакета.
  • local_dir: (опционально) Локальная директория для сохранения файлов.
  • files: (опционально) Список файлов для скачивания. Если не указано, скачиваются все файлы из bucket_dir.

Примеры использования:

  • Скачивание всех файлов из указанной директории бакета в локальную директорию:
s3_client.download_files(
    bucket_name="my_bucket",
    bucket_dir="reports/2024",
    local_dir="./downloads"
)
  • Скачивание конкретных файлов из директории бакета:
s3_client.download_files(
    bucket_name="my_bucket",
    bucket_dir="reports/2024",
    local_dir="./downloads",
    files=["report1.csv", "report2.csv"]
)
  • Скачивание всех файлов из корня бакета:
s3_client.download_files(
    bucket_name="my_bucket",
    local_dir="./downloads"
)

Команды для работы с s3

Команда s3_upload

Команда для загрузки файла в указанный S3 бакет.

Синтаксис:

python manage.py s3_upload_file <path_to_file_local> [--path_to_file_bucket=<path_to_file_bucket>] [--bucket_name=<bucket_name>]

Аргументы:

  • path_to_file_local (обязательный): Путь к локальному файлу, который нужно загрузить.
  • --path_to_file_bucket (опциональный): Путь, по которому файл будет загружен в бакет. Если не указан, файл загружается в корень бакета.
  • --bucket_name (опциональный): Имя S3 бакета. Если не указано, используется значение из настроек settings.AWS_STORAGE_BUCKET_NAME.

Пример использования:

  • Загрузка файла в корень бакета:
python manage.py s3_upload_file ./data/report.csv
  • Загрузка файла в указанную директорию бакета:
python manage.py s3_upload_file ./data/report.csv --path_to_file_bucket="reports/2024"
  • Загрузка файла в указанный бакет:
python manage.py s3_upload_file ./data/report.csv --bucket_name="my_bucket"

Для подробностей о методе загрузки файла, см. описание метода upload_file класса S3Client.

Команда s3_download

Команда для скачивания файлов из S3-хранилища.

Синтаксис:

python manage.py s3_download [--path_to_file_bucket=<path_to_file_bucket>] [--path_to_file_local=<path_to_file_local>] [--bucket_name=<bucket_name>] [--bucket_dir=<bucket_dir>] [--local_dir=<local_dir>] [--files=<file1> <file2> ...]

Аргументы:

  • --path_to_file_bucket (опциональный): Путь к файлу в бакете, который нужно скачать. Если не указано, скачиваются все файлы из директории.
  • --path_to_file_local (опциональный): Локальный путь для сохранения файла. Если не указан, используется имя файла из бакета.
  • --bucket_name (опциональный): Имя S3-бакета, из которого нужно скачать файлы. Если не указано, используется значение из настроек settings.AWS_STORAGE_BUCKET_NAME.
  • --bucket_dir (опциональный): Директория в бакете, относительно которой будут искаться файлы для скачивания. Если не указано, поиск происходит от корня бакета.
  • --local_dir (опциональный): Локальная директория, в которую будут скачаны файлы. Если не указано, используется текущая директория.
  • --files (опциональный): Список путей к файлам в бакете относительно bucket_dir или корня бакета. Если не указано, скачиваются все файлы из bucket_dir.

Примеры использования:

  • Скачивание одного файла из бакета в локальную директорию:
python manage.py s3_download --path_to_file_bucket "reports/2024/report.csv" --path_to_file_local "./downloads/report.csv"
  • Скачивание нескольких файлов из указанной директории бакета:
python manage.py s3_download --bucket_dir "reports/2024" --local_dir "./downloads"
  • Скачивание файлов из бакета по указанным путям:
python manage.py s3_download --files "reports/2024/report1.csv" "reports/2024/report2.csv" --local_dir "./downloads"
  • Скачивание всех файлов из директории в бакете:
python manage.py s3_download --bucket_dir "reports/2024" --local_dir "./downloads"

Для подробностей о методах скачивания файлов, см. описание методов download_file и download_files класса S3Client.