Работа с файлами в 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.