UNPKG

picgo-plugin-oss

Version:

picgo beecloud oss uploader

110 lines (109 loc) 3.96 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; const uploader_1 = __importDefault(require("./uploader")); const utils_1 = require("./utils"); module.exports = (ctx) => { const config = (ctx) => { const defaultConfig = { accessKeyID: '', secretAccessKey: '', bucketName: '', uploadPath: 'docs/{timestamp}.{extName}', pathStyleAccess: true, rejectUnauthorized: true, acl: 'public-read', urlPrefix: null, region: null }; let userConfig = ctx.getConfig('picBed.bee-oss'); userConfig = Object.assign(Object.assign({}, defaultConfig), (userConfig || {})); return [ { name: 'accessKeyID', type: 'input', default: userConfig.accessKeyID, required: true, message: 'access key id', alias: '应用密钥 ID' }, { name: 'secretAccessKey', type: 'password', default: userConfig.secretAccessKey, required: true, message: 'secret access key', alias: '应用密钥' }, { name: 'bucketName', type: 'input', default: userConfig.bucketName, required: true, alias: '桶' }, { name: 'uploadPath', type: 'input', default: userConfig.uploadPath, required: true, alias: '文件路径' }, { name: 'endpoint', type: 'input', default: userConfig.endpoint, required: false, alias: '自定义节点' } ]; }; const handle = async (ctx) => { let userConfig = ctx.getConfig('picBed.bee-oss'); if (!userConfig) { throw new Error("Can't find beecloud oss uploader config"); } if (userConfig.urlPrefix) { userConfig.urlPrefix = userConfig.urlPrefix.replace(/\/?$/, ''); } const client = uploader_1.default.createS3Client(userConfig.accessKeyID, userConfig.secretAccessKey, userConfig.region, userConfig.endpoint, userConfig.pathStyleAccess, userConfig.rejectUnauthorized); const output = ctx.output; const tasks = output.map((item, idx) => uploader_1.default.createUploadTask(client, userConfig.bucketName, utils_1.formatPath(item, userConfig.uploadPath), item, idx, userConfig.acl)); try { const results = await Promise.all(tasks); for (let result of results) { const { index, url, imgURL } = result; delete output[index].buffer; delete output[index].base64Image; output[index].url = url; output[index].imgUrl = url; if (userConfig.urlPrefix) { output[index].url = `${userConfig.urlPrefix}/${imgURL}`; output[index].imgUrl = `${userConfig.urlPrefix}/${imgURL}`; } } return ctx; } catch (err) { ctx.log.error('上传到 BeeCloud OSS 发生错误,请检查配置是否正确'); ctx.log.error(err); ctx.emit('notification', { title: 'BeeCloud OSS 上传错误', body: '请检查配置是否正确', text: '' }); throw err; } }; const register = () => { ctx.helper.uploader.register('bee-oss', { handle, config, name: 'BeeCloud OSS' }); }; return { register }; };