advanced-features: recording-basic-azure - updated name of the service
This commit is contained in:
parent
d5dd493a37
commit
9cdb39a53b
@ -0,0 +1,91 @@
|
|||||||
|
import {
|
||||||
|
BlobServiceClient,
|
||||||
|
StorageSharedKeyCredential,
|
||||||
|
} from "@azure/storage-blob";
|
||||||
|
|
||||||
|
// Azure configuration
|
||||||
|
const AZURE_ACCOUNT_NAME = process.env.AZURE_ACCOUNT_NAME || "devstoreaccount";
|
||||||
|
const AZURE_ACCOUNT_KEY =
|
||||||
|
process.env.AZURE_ACCOUNT_KEY || "nokey";
|
||||||
|
const AZURE_CONTAINER_NAME =
|
||||||
|
process.env.AZURE_CONTAINER_NAME || "openvidu-appdata";
|
||||||
|
|
||||||
|
const AZURE_ENDPOINT =
|
||||||
|
process.env.AZURE_ENDPOINT ||
|
||||||
|
`https://${AZURE_ACCOUNT_NAME}.blob.core.windows.net`;
|
||||||
|
|
||||||
|
export class AzureBlobService {
|
||||||
|
static instance;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
if (AzureBlobService.instance) {
|
||||||
|
return AzureBlobService.instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
const sharedKeyCredential = new StorageSharedKeyCredential(
|
||||||
|
AZURE_ACCOUNT_NAME,
|
||||||
|
AZURE_ACCOUNT_KEY
|
||||||
|
);
|
||||||
|
|
||||||
|
this.blobServiceClient = new BlobServiceClient(
|
||||||
|
AZURE_ENDPOINT,
|
||||||
|
sharedKeyCredential
|
||||||
|
);
|
||||||
|
|
||||||
|
this.containerClient = this.blobServiceClient.getContainerClient(
|
||||||
|
AZURE_CONTAINER_NAME
|
||||||
|
);
|
||||||
|
|
||||||
|
AzureBlobService.instance = this;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
async exists(key) {
|
||||||
|
const blobClient = this.containerClient.getBlobClient(key);
|
||||||
|
return await blobClient.exists();
|
||||||
|
}
|
||||||
|
|
||||||
|
async getObjectSize(key) {
|
||||||
|
const props = await this.headObject(key);
|
||||||
|
return props.contentLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
async headObject(key) {
|
||||||
|
const blobClient = this.containerClient.getBlobClient(key);
|
||||||
|
const props = await blobClient.getProperties();
|
||||||
|
return props;
|
||||||
|
}
|
||||||
|
|
||||||
|
async getObject(key, range) {
|
||||||
|
const blobClient = this.containerClient.getBlobClient(key);
|
||||||
|
const downloadOptions = range
|
||||||
|
? {
|
||||||
|
rangeGetContentMD5: false,
|
||||||
|
range: {
|
||||||
|
offset: range.start,
|
||||||
|
count: range.end - range.start + 1,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
: {};
|
||||||
|
|
||||||
|
const response = await blobClient.download(
|
||||||
|
downloadOptions.range?.offset ?? 0,
|
||||||
|
downloadOptions.range?.count
|
||||||
|
);
|
||||||
|
|
||||||
|
return response.readableStreamBody;
|
||||||
|
}
|
||||||
|
|
||||||
|
async listObjects() {
|
||||||
|
const result = [];
|
||||||
|
for await (const blob of this.containerClient.listBlobsFlat()) {
|
||||||
|
result.push(blob);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
async deleteObject(key) {
|
||||||
|
const blobClient = this.containerClient.getBlobClient(key);
|
||||||
|
return await blobClient.deleteIfExists();
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user