ts-api-core
Version:
Nodejs api framework core
209 lines • 8.64 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.OssAccess = exports.OssObjectDTO = void 0;
/* eslint-disable no-plusplus */
/* eslint-disable no-await-in-loop */
/* eslint-disable @typescript-eslint/no-unsafe-call */
const http = require("http");
const https = require("https");
const base_object_1 = require("../../context/base.object");
const request_context_1 = require("../../context/request.context");
const ioc_decorator_1 = require("../../mvc/ioc.decorator");
const package_loader_1 = require("../package.loader");
class OssObjectDTO {
}
exports.OssObjectDTO = OssObjectDTO;
/** 阿里云 OSS 服务类 */
let OssAccess = class OssAccess extends base_object_1.BaseObject {
/**
* 阿里云 OSS 管理服务类
* @param context 上下文对象
* @param accessKeyId 凭证id
* @param accessKeySecret 凭证secret
* @param region bucket所在region
* @param bucket bucket
*/
constructor(context, config) {
super(context);
this.config = {
accessKeyId: config.accessKeyId,
accessKeySecret: config.accessKeySecret,
region: config.region,
bucket: config.bucket,
endpoint: config.endPoint
};
}
get oss() {
if (!this._oss) {
this._oss = new this.alioss(this.config);
}
return this._oss;
}
get alioss() {
if (!this._alioss) {
this._alioss = package_loader_1.PackageLoader.load('ali-oss');
}
return this._alioss;
}
/**
* 把文件从一个bucket搬移到另外一个bucket 文件名称保持不变
* @param fileName 文件名称
* @param fromBucket 源bucket
*/
move(fileName, fromBucket) {
return __awaiter(this, void 0, void 0, function* () {
const result = yield this.execute(this.oss.copy(fileName, `/${fromBucket}/${fileName}`));
return result.res.status === 200;
});
}
/**
* 从bucket里面删除一个文件
* @param fileName 文件名称
*/
remove(fileName) {
return __awaiter(this, void 0, void 0, function* () {
const result = yield this.execute(this.oss.delete(fileName));
return result.res.status === 204;
});
}
/**
* 上传文件
* @param fileName 上传到bucket的文件名称
* @param localFile 本地文件的路径
*/
upload(fileName, localFile) {
return __awaiter(this, void 0, void 0, function* () {
const result = yield this.execute(this.oss.put(fileName, localFile));
return result.res.status === 200;
});
}
/**
* 流式上传
* @param fileName 上传到bucket的文件名称
* @param stream NodeJS.ReadableStream 流
*/
uploadStream(fileName, stream) {
return __awaiter(this, void 0, void 0, function* () {
const result = yield this.execute(this.oss.putStream(fileName, stream));
return result.res.status === 200;
});
}
/**
* 流式上传指定 url
* @param fileName 上传到bucket的文件名称
* @param url 来源数据URL
* @returns 返回上传的数据大小
*/
uploadUrlDownload(fileName, url) {
return __awaiter(this, void 0, void 0, function* () {
if (!url) {
return 0;
}
let size = 0;
const result = yield new Promise((resolve) => {
const client = url.startsWith("https") ? https : http;
client.get(url, (proxyResp) => {
if (proxyResp.statusCode === 200) {
proxyResp.on('data', (chunk) => {
size = size + Number(chunk.length);
});
this.oss.putStream(fileName, proxyResp).then((data) => {
resolve(data);
}).catch(e => {
resolve(undefined);
});
}
else {
resolve(undefined);
}
});
});
return result !== undefined && result.res.status === 200 ? size : 0;
});
}
/**
* 上传内存数据
* @param fileName 上传到bucket的文件名称
* @param buffer Buffer 数据, new Buffer("xxx")
*/
uploadBuffer(fileName, buffer) {
return __awaiter(this, void 0, void 0, function* () {
const result = yield this.execute(this.oss.put(fileName, buffer));
return result.res.status === 200;
});
}
/** 获取下载地址 */
getDownloadUrl(fileName) {
return `http://${this.config.bucket}.${this.config.region}.aliyuncs.com/${fileName}`;
}
/**
* 获取指定路径下所有文件名
* @param path 文件路径,如果指定,需要 "/" 结尾
* @returns
*/
getFileList(path) {
return __awaiter(this, void 0, void 0, function* () {
const data = [];
let marker;
do {
try {
const result = yield this.execute(this.oss.list({ marker, 'max-keys': 1000, prefix: path }), '获取文件列表', true, 5);
marker = result.nextMarker;
if (result.objects !== undefined && Array.isArray(result.objects)) {
data.push(result.objects);
}
}
catch (e) {
marker = undefined;
}
} while (marker);
return data;
});
}
/**
* 获取oss上传临时凭证
* @param roleArn oss角色,在阿里云账号中心可以找到
* @param expire 凭证有效期 单位秒 调用方应该把这个凭证缓存起来,不用每次都获取新的token 最小 900秒,最大3600秒
* @param session 应用名称
*/
getStsToken(roleArn, expire = 3600, session) {
return __awaiter(this, void 0, void 0, function* () {
const sts = new this.alioss.STS({
accessKeyId: this.config.accessKeyId,
accessKeySecret: this.config.accessKeySecret
});
const result = yield this.execute(sts.assumeRole(roleArn, undefined, expire, session));
return {
accessKeyId: result.credentials.AccessKeyId,
stsToken: result.credentials.SecurityToken,
region: this.config.region,
accessKeySecret: result.credentials.AccessKeySecret,
bucket: this.config.bucket
};
});
}
};
OssAccess = __decorate([
(0, ioc_decorator_1.Provide)(),
__metadata("design:paramtypes", [request_context_1.RequestContext, Object])
], OssAccess);
exports.OssAccess = OssAccess;
//# sourceMappingURL=oss.access.js.map