88 lines
2.5 KiB
JavaScript
88 lines
2.5 KiB
JavaScript
const s3 = require("@aws-sdk/client-s3");
|
|
const { S3Client, PutObjectCommand, GetObjectCommand } = s3;
|
|
|
|
const s3Client = new S3Client({
|
|
region: process.env.AWS_REGION,
|
|
endpoint: process.env.S3_ENDPOINT,
|
|
credentials: {
|
|
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
|
|
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
|
|
},
|
|
forcePathStyle: process.env.S3_FORCE_PATH_STYLE === 'true',
|
|
});
|
|
|
|
module.exports = {};
|
|
|
|
module.exports.uploadFile = async (key, body) => {
|
|
return new Promise(async (resolve, reject) => {
|
|
const command = new PutObjectCommand({
|
|
Bucket: process.env.S3_BUCKET,
|
|
Key: key,
|
|
Body: body,
|
|
});
|
|
try {
|
|
await s3Client.send(command);
|
|
resolve();
|
|
} catch (err) {
|
|
reject(err);
|
|
}
|
|
});
|
|
};
|
|
|
|
module.exports.downloadFile = async (key) => {
|
|
return new Promise(async (resolve, reject) => {
|
|
const command = new GetObjectCommand({
|
|
Bucket: process.env.S3_BUCKET,
|
|
Key: key,
|
|
});
|
|
try {
|
|
const response = await s3Client.send(command);
|
|
const stream = response.Body;
|
|
const chunks = [];
|
|
try {
|
|
for await (const chunk of stream) {
|
|
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
}
|
|
resolve(Buffer.concat(chunks));
|
|
} catch (streamErr) {
|
|
reject(streamErr);
|
|
}
|
|
} catch (err) {
|
|
reject(err);
|
|
}
|
|
});
|
|
};
|
|
|
|
// Function to see if file/folder exists
|
|
module.exports.fileExists = async (key) => {
|
|
return new Promise(async (resolve, reject) => {
|
|
try {
|
|
const command = new GetObjectCommand({
|
|
Bucket: process.env.S3_BUCKET,
|
|
Key: key,
|
|
});
|
|
await s3Client.send(command);
|
|
resolve(true);
|
|
} catch (err) {
|
|
resolve(false);
|
|
}
|
|
});
|
|
};
|
|
|
|
// List files in a folder
|
|
module.exports.listFiles = async (prefix) => {
|
|
const { ListObjectsV2Command } = require("@aws-sdk/client-s3");
|
|
return new Promise(async (resolve, reject) => {
|
|
const command = new ListObjectsV2Command({
|
|
Bucket: process.env.S3_BUCKET,
|
|
Prefix: prefix,
|
|
});
|
|
try {
|
|
const response = await s3Client.send(command);
|
|
const files = response.Contents ? response.Contents.map(item => item.Key) : [];
|
|
resolve(files);
|
|
} catch (err) {
|
|
reject(err);
|
|
}
|
|
});
|
|
}; |