UNPKG

ts-api-core

Version:

Nodejs api framework core

209 lines 8.64 kB
"use strict"; 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