Skip to main content

S3

У якості файлового сховища можна використовувати буль-який з наявних сервісів S3

Налаштування

Усі налаштування S3 прописуються у конфіг файлі у вигляді:

{
"s3": {
"endpoint": "http://192.168.3.160:9000", // підключення
"user": "minioadmin", // користувач
"password": "minioadmin" // пароль
}
}

Робота з файлами

Більшість файлів вантажаться на s3, але є вийнятки:

  • тимчасові файли
  • js файли програм
  • тайли

Файли вантажаться до сховища, яке вказане у налаштуваннях

Для роботи зі сховищем використано модуль npm @aws-sdk/client-s3

Завантаження реалізовано шляхом копіювання збереженого на сервері файла до сховища сервісу s3. У системі створено окремо клієнт для роботи з сервісом. Приклад реалізаціє клієнта:

    const { S3Client } = require('@aws-sdk/client-s3');

const getS3Client = ({
access_key_id: accessKeyId,
secret_access_key: secretAccessKey,
endpoint,
region,
}) => {
if (!accessKeyId || !secretAccessKey || !endpoint) throw new Error('No required params');
try {
const client = new S3Client({
credentials: {
accessKeyId,
secretAccessKey,
},
endpoint,
forcePathStyle: true,
region,
});
return client;
} catch (e) {
console.log('s3client', e.toString());
}
};
module.exports = { getS3Client };

Також для клієнта розроблено окремо функції файлового менеджера, а саме:

  • завантаження файла
  • отримання метаданих про файл

Приклад реалізації метода на завантаження файлів наведено нижче в прикладі:

???+ example

    const { createReadStream } = require('fs');
const {
PutObjectCommand,
HeadObjectCommand,
} = require('@aws-sdk/client-s3');

const { getS3Client } = require('./client');

const uploadFile = async (s3Settings, tempFilepath, filepath) => {
const s3Client = getS3Client(s3Settings);
try {
const fileStream = createReadStream(tempFilepath);
const bucketName = s3Settings.bucket_name;
const bucketParams = {
Bucket: bucketName,
Key: filepath,
Body: fileStream,
};
const data = await s3Client.send(new PutObjectCommand(bucketParams));
return data;
} catch (err) {
throw new Error(`Upload error${err.stack}`);
} finally {
s3Client.destroy();
}
};