94 lines
2.0 KiB
JavaScript
94 lines
2.0 KiB
JavaScript
import {
|
|
S3Client,
|
|
GetObjectCommand,
|
|
DeleteObjectCommand,
|
|
ListObjectsV2Command,
|
|
HeadObjectCommand,
|
|
} from "@aws-sdk/client-s3";
|
|
|
|
// S3 configuration
|
|
const S3_ENDPOINT = process.env.S3_ENDPOINT || "http://localhost:9000";
|
|
const S3_ACCESS_KEY = process.env.S3_ACCESS_KEY || "minioadmin";
|
|
const S3_SECRET_KEY = process.env.S3_SECRET_KEY || "minioadmin";
|
|
const AWS_REGION = process.env.AWS_REGION || "us-east-1";
|
|
const S3_BUCKET = process.env.S3_BUCKET || "openvidu-appdata";
|
|
|
|
export class S3Service {
|
|
static instance;
|
|
|
|
constructor() {
|
|
if (S3Service.instance) {
|
|
return S3Service.instance;
|
|
}
|
|
|
|
this.s3Client = new S3Client({
|
|
endpoint: S3_ENDPOINT,
|
|
credentials: {
|
|
accessKeyId: S3_ACCESS_KEY,
|
|
secretAccessKey: S3_SECRET_KEY,
|
|
},
|
|
region: AWS_REGION,
|
|
forcePathStyle: true,
|
|
});
|
|
|
|
S3Service.instance = this;
|
|
return this;
|
|
}
|
|
|
|
async exists(key) {
|
|
try {
|
|
await this.headObject(key);
|
|
return true;
|
|
} catch (error) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
async headObject(key) {
|
|
const params = {
|
|
Bucket: S3_BUCKET,
|
|
Key: key,
|
|
};
|
|
const command = new HeadObjectCommand(params);
|
|
return this.run(command);
|
|
}
|
|
|
|
async getObjectSize(key) {
|
|
const { ContentLength: size } = await this.headObject(key);
|
|
return size;
|
|
}
|
|
|
|
async getObject(key, range) {
|
|
const params = {
|
|
Bucket: S3_BUCKET,
|
|
Key: key,
|
|
Range: range ? `bytes=${range.start}-${range.end}` : undefined,
|
|
};
|
|
const command = new GetObjectCommand(params);
|
|
const { Body: body } = await this.run(command);
|
|
return body;
|
|
}
|
|
|
|
async listObjects(prefix) {
|
|
const params = {
|
|
Bucket: S3_BUCKET,
|
|
Prefix: prefix,
|
|
};
|
|
const command = new ListObjectsV2Command(params);
|
|
return await this.run(command);
|
|
}
|
|
|
|
async deleteObject(key) {
|
|
const params = {
|
|
Bucket: S3_BUCKET,
|
|
Key: key,
|
|
};
|
|
const command = new DeleteObjectCommand(params);
|
|
return this.run(command);
|
|
}
|
|
|
|
async run(command) {
|
|
return this.s3Client.send(command);
|
|
}
|
|
}
|