mirror of
https://github.com/certd/certd.git
synced 2026-04-14 12:30:54 +08:00
118 lines
2.8 KiB
TypeScript
118 lines
2.8 KiB
TypeScript
import { TencentAccess } from "../access.js";
|
|
import { ILogger, safePromise } from "@certd/basic";
|
|
import fs from "fs";
|
|
|
|
export class TencentCosClient {
|
|
access: TencentAccess;
|
|
logger: ILogger;
|
|
region: string;
|
|
bucket: string;
|
|
|
|
constructor(opts: { access: TencentAccess; logger: ILogger; region: string; bucket: string }) {
|
|
this.access = opts.access;
|
|
this.logger = opts.logger;
|
|
this.bucket = opts.bucket;
|
|
this.region = opts.region;
|
|
}
|
|
|
|
async getCosClient() {
|
|
const sdk = await import("cos-nodejs-sdk-v5");
|
|
const clientConfig = {
|
|
SecretId: this.access.secretId,
|
|
SecretKey: this.access.secretKey,
|
|
};
|
|
return new sdk.default(clientConfig);
|
|
}
|
|
|
|
async uploadFile(key: string, file: Buffer | string) {
|
|
const cos = await this.getCosClient();
|
|
return safePromise((resolve, reject) => {
|
|
let readableStream = file as any;
|
|
if (typeof file === "string") {
|
|
readableStream = fs.createReadStream(file);
|
|
}
|
|
cos.putObject(
|
|
{
|
|
Bucket: this.bucket /* 必须 */,
|
|
Region: this.region /* 必须 */,
|
|
Key: key /* 必须 */,
|
|
Body: readableStream, // 上传文件对象
|
|
onProgress: function (progressData) {
|
|
console.log(JSON.stringify(progressData));
|
|
},
|
|
},
|
|
function (err, data) {
|
|
if (err) {
|
|
reject(err);
|
|
return;
|
|
}
|
|
resolve(data);
|
|
}
|
|
);
|
|
});
|
|
}
|
|
|
|
async removeFile(key: string) {
|
|
const cos = await this.getCosClient();
|
|
return safePromise((resolve, reject) => {
|
|
cos.deleteObject(
|
|
{
|
|
Bucket: this.bucket,
|
|
Region: this.region,
|
|
Key: key,
|
|
},
|
|
function (err, data) {
|
|
if (err) {
|
|
reject(err);
|
|
return;
|
|
}
|
|
resolve(data);
|
|
}
|
|
);
|
|
});
|
|
}
|
|
|
|
async downloadFile(key: string, savePath: string) {
|
|
const cos = await this.getCosClient();
|
|
const writeStream = fs.createWriteStream(savePath);
|
|
return safePromise((resolve, reject) => {
|
|
cos.getObject(
|
|
{
|
|
Bucket: this.bucket,
|
|
Region: this.region,
|
|
Key: key,
|
|
Output: writeStream,
|
|
},
|
|
function (err, data) {
|
|
if (err) {
|
|
reject(err);
|
|
return;
|
|
}
|
|
resolve(data);
|
|
}
|
|
);
|
|
});
|
|
}
|
|
|
|
async listDir(dirKey: string) {
|
|
const cos = await this.getCosClient();
|
|
return safePromise((resolve, reject) => {
|
|
cos.getBucket(
|
|
{
|
|
Bucket: this.bucket,
|
|
Region: this.region,
|
|
Prefix: dirKey,
|
|
MaxKeys: 1000,
|
|
},
|
|
function (err, data) {
|
|
if (err) {
|
|
reject(err);
|
|
return;
|
|
}
|
|
resolve(data.Contents);
|
|
}
|
|
);
|
|
});
|
|
}
|
|
}
|