picgo-plugin-oss
Version:
picgo beecloud oss uploader
110 lines (109 loc) • 3.96 kB
JavaScript
;
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
};
};