Задать вопрос

Как взаимодействовать с Yandex Object Storage через JS?

Например, у Амазона есть свой SDK для AWS (https://aws.amazon.com/ru/sdk-for-browser/)
Яндекс вроде совместим с AWS, но JS SDK я у них не нашел.
Возможно, я чего то не понимаю. Только недавно начал изучать этот сервис.
  • Вопрос задан
  • 2207 просмотров
Подписаться 4 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Borigaldi
Примерно такой код для Node.js. Доки здесь

const AWS = require('aws-sdk');
require('dotenv').config(); // для получения переменных из окружения Node.js

class YandexCloud {

  constructor () {
    this.aws = new AWS.S3({
      endpoint: 'https://storage.yandexcloud.net', 
      accessKeyId: process.env.YA_STORAGE_ACCESS_KEY, // берем ключ из переменной окружения
      secretAccessKey: process.env.YA_STORAGE_SECRET_KEY, // берем секрет из переменной окружения
      region: 'ru-central1',
      httpOptions: {
        timeout: 10000,
        connectTimeout: 10000
      },
    });
  }

  upload = async ({file,path,fileName}) =>  {
    try {
      const params = {
        Bucket: 'название', // название созданного bucket
        Key: `${path}/${fileName}`, // путь и название файла в облаке (path без слэша впереди)
        Body: file, // сам файл
        ContentType: 'text/plain', // тип файла
      }
      const result = await new Promise(function(resolve, reject) {
        this.aws.upload(params, function(err, data) {
          if (err) return reject(err);
          return resolve(data);
        });
      });
      return result;
    } catch (e) {
      console.error(e);
    }
  }
}

const YaCloud = new YandexCloud();
YaCloud.upload({
  file: '', // файл
  path: 'путь/в/облаке',
  fileName: 'файл.txt',
})
Ответ написан
Комментировать
@akot777
Спасибо Borigaldi за ответ... Но )))

Если полный SDK не охота ставить ( 70 мб ) можно использовать только модуль @aws-sdk/client-s3 ( 4мб )
const { S3Client, PutObjectCommand } = require('@aws-sdk/client-s3');

И креденшалс нужно так указать:
credentials: {
			accessKeyId: accessKeyId, // берем ключ из переменной окружения
			secretAccessKey: secretAccessKey, // берем секрет из переменной окружения
		},

И еще метод .send(new PutObjectCommand(params)) вместо .upload():
const result = await new Promise(function(resolve, reject) {
				aws.send(new PutObjectCommand(params)).then(
					(data) => {
						console.log(data)
						resolve(data)
					},
					(error) => {
						console.log(error)
						reject(error)
					}
				);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы