forked from tugita/Pixi
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdoSpaceService.js
77 lines (65 loc) · 2.73 KB
/
doSpaceService.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
const AWS = require('aws-sdk');
const path = require('path');
const dotenv = require('dotenv');
// Подключаем переменные окружения
dotenv.config();
// Функция для создания экземпляра S3 с конфигурацией для DigitalOcean Spaces
function getS3() {
const spacesEndpoint = new AWS.Endpoint('ams3.digitaloceanspaces.com');
return new AWS.S3({
endpoint: spacesEndpoint.href,
credentials: new AWS.Credentials({
accessKeyId: process.env.cdn_key,
secretAccessKey: process.env.cdn_secret_key,
}),
});
}
// Генерация уникального имени файла
function generateFileName(userId) {
const timestamp = Date.now();
return `${userId}_${timestamp}.jpg`;
}
// Функция для загрузки оригинального файла на DigitalOcean Spaces
async function uploadOriginalFile(userId, file) {
const fileName = `${userId}.jpg`; // Имя файла теперь только userId
const finalPath = `api-clicker/tg/avatars/${fileName}`; // Уникальный путь к файлу
const s3 = getS3();
const params = {
Bucket: 'cobuild',
Key: finalPath,
Body: file.buffer,
ACL: 'public-read',
ContentType: file.mimetype || 'image/jpeg',
};
try {
await s3.putObject(params).promise();
return `https://cdn.joincommunity.xyz/${finalPath}`;
} catch (error) {
throw new Error(`Ошибка загрузки оригинального файла: ${error.message}`);
}
}
// Функция для загрузки пикселизированного файла на DigitalOcean Spaces
async function uploadPixelatedFile(userId, pixelatedBuffer, expire) {
const s3 = getS3();
const ext = '.jpg'; // Фиксированное расширение
const fileName = `${userId}_${Date.now()}${ext}`; // Генерация уникального имени файла
const finalPath = `api-clicker/tg/avatars/pixel/${fileName}`; // Уникальный путь к пикселизированному файлу
const params = {
Bucket: 'cobuild', // Ваш Bucket в DigitalOcean Spaces
Key: finalPath,
Body: pixelatedBuffer,
ACL: 'public-read',
ContentType: 'image/jpeg',
};
try {
// Загружаем файл
await s3.putObject(params).promise();
return `https://cdn.joincommunity.xyz/${finalPath}`;
} catch (error) {
throw new Error(`Ошибка загрузки пикселизированного файла: ${error.message}`);
}
}
module.exports = {
uploadOriginalFile,
uploadPixelatedFile,
};