Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация
На главную
25eb9e0a-a5a8-472a-ace7-940b8bd2adf0
Облачные сервисы

JavaScript

@aws-sdk/client-s3 — это официальная библиотека AWS SDK для работы с сервисом S3 на языке JavaScript. С ее помощью можно загружать и скачивать файлы, получать списки объектов, удалять их, использовать мультипарт-загрузку и формировать подписанные ссылки.

Установка

Для установки используйте npm или yarn:

    
npm install @aws-sdk/client-s3

или

    
yarn add @aws-sdk/client-s3

Настройка доступа

При использовании @aws-sdk/client-s3 реквизиты доступа можно задать несколькими способами.

Через файлы ~/.aws/config и ~/.aws/credentials

При использовании AWS CLI в домашней директории пользователя автоматически создается папка .aws с файлами, содержащими данные для подключения к S3. При необходимости эту папку и файлы можно создать вручную — без использования AWS CLI. Файл ~/.aws/credentials должен содержать такие данные:

    
[default]
aws_access_key_id = <ACCESS_KEY>
aws_secret_access_key = <SECRET_KEY>

И ~/.aws/config:

    
[default]
output = json
endpoint_url = https://s3.twcstorage.ru
region = ru-1

Через переменные окружения

Реквизиты можно задать с помощью переменных окружения:

    
export AWS_ACCESS_KEY_ID=<ACCESS_KEY>
export AWS_SECRET_ACCESS_KEY=<SECRET_KEY>

Через код приложения

Полная настройка клиента с явной передачей всех параметров:

    
const { S3Client } = require("@aws-sdk/client-s3"); const s3 = new S3Client({ region: "ru-1", endpoint: "https://s3.twcstorage.ru", credentials: { accessKeyId: "<ACCESS_KEY>", secretAccessKey: "<SECRET_KEY>" } });

Использование профиля AWS CLI

Если настроено несколько профилей, можно указать нужный через переменную окружения:

    
export AWS_PROFILE=myprofile

В этом случае можно создать клиента без передачи ключей:

    
const s3 = new S3Client({ region: "ru-1", endpoint: "https://s3.twcstorage.ru" });

Пример

Рассмотрим, как при помощи SDK выполнять базовые операции с объектами. В этом примере скрипт:

  • загружает файл в бакет;
  • выводит список всех объектов;
  • скачивает загруженный файл под другим именем;
  • удаляет объект из хранилища.

Предварительно создайте файл с именем example.txt в той же директории, где находится скрипт.

Код скрипта:

    
const { S3Client, ListObjectsV2Command, PutObjectCommand, GetObjectCommand, DeleteObjectCommand } = require("@aws-sdk/client-s3"); const { createReadStream, createWriteStream, existsSync } = require("fs"); const { pipeline } = require("stream"); const { promisify } = require("util"); const pipe = promisify(pipeline); const bucketName = "имя_бакета"; const region = "ru-1"; const endpoint = "https://s3.twcstorage.ru"; const localUploadPath = "example.txt"; const s3Key = "example.txt"; const localDownloadPath = "downloaded_example.txt"; // Создание клиента S3 const s3 = new S3Client({ region, endpoint, }); async function main() { // 1. Загрузка файла if (existsSync(localUploadPath)) { console.log(`Загрузка файла ${localUploadPath} в бакет...`); await s3.send(new PutObjectCommand({ Bucket: bucketName, Key: s3Key, Body: createReadStream(localUploadPath), })); console.log("Загрузка завершена."); } else { console.log(`Файл ${localUploadPath} не найден. Пропуск загрузки.`); } // 2. Список объектов console.log("\nСодержимое бакета:"); const list = await s3.send(new ListObjectsV2Command({ Bucket: bucketName })); (list.Contents || []).forEach((obj) => { console.log(`- ${obj.Key}`); }); // 3. Скачивание console.log(`\nСкачивание ${s3Key} в ${localDownloadPath}...`); const { Body } = await s3.send(new GetObjectCommand({ Bucket: bucketName, Key: s3Key, })); if (Body) { await pipe(Body, createWriteStream(localDownloadPath)); console.log("Скачивание завершено."); } // 4. Удаление console.log(`\nУдаление ${s3Key} из бакета...`); await s3.send(new DeleteObjectCommand({ Bucket: bucketName, Key: s3Key })); console.log("Удаление завершено."); } main().catch((err) => { console.error("Ошибка при выполнении операций:", err); });

Дополнительные примеры использования SDK вы можете найти в нашем репозитории GitHub.

Была ли статья полезна?
Ваша оценка очень важна
Пока нет комментариев