UNPKG

picgo-plugin-s3-lls

Version:

picgo amazon s3 uploader

156 lines (155 loc) 5.61 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: '{year}/{month}/{md5}.{extName}', uploadPath: 'docs/{timestamp}.{extName}', pathStyleAccess: true, rejectUnauthorized: true, acl: 'public-read' }; let userConfig = ctx.getConfig('picBed.aws-s3'); 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: 'acl', type: 'input', default: userConfig.acl || 'public-read', message: '文件访问权限', required: true, alias: '权限' }, { name: 'region', type: 'input', default: userConfig.region, required: false, alias: '地区' }, { name: 'endpoint', type: 'input', default: userConfig.endpoint, required: false, alias: '自定义节点' }, { name: 'urlPrefix', type: 'input', default: userConfig.urlPrefix, message: 'https://img.example.com/bucket-name/', required: false, alias: '自定义域名' }, { name: 'pathStyleAccess', type: 'confirm', default: userConfig.pathStyleAccess || true, message: 'enable path-style-access or not', required: false, alias: 'PathStyleAccess' }, { name: 'rejectUnauthorized', type: 'confirm', default: userConfig.rejectUnauthorized || true, message: '是否拒绝无效TLS证书连接', required: false, alias: 'rejectUnauthorized' }, // { // name: 'acl', // type: 'input', // default: userConfig.acl || 'public-read', // message: '上传资源的访问策略', // required: false, // alias: 'ACL 访问控制列表' // } ]; }; const handle = async (ctx) => { let userConfig = ctx.getConfig('picBed.aws-s3'); if (!userConfig) { throw new Error("Can't find amazon s3 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('上传到 Amazon S3 发生错误,请检查配置是否正确'); ctx.log.error(err); ctx.emit('notification', { title: 'Amazon S3 上传错误', body: '请检查配置是否正确', text: '' }); throw err; } }; const register = () => { ctx.helper.uploader.register('aws-s3', { handle, config, name: 'Amazon S3' }); }; return { register }; };