UNPKG

picgo-plugin-s3-own

Version:

picgo amazon s3 uploader for Own use

190 lines (189 loc) 6.79 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}", trimmedUploadPath: "{year}{month}/original/{md5}.{extName}", pathStyleAccess: false, rejectUnauthorized: true, acl: "public-read", urlSuffix: "", }; let userConfig = ctx.getConfig("picBed.aws-s3-own"); 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: "trimmedUploadPath", type: "input", default: userConfig.trimmedUploadPath, required: false, alias: "裁剪后的文件路径", }, { name: "region", type: "input", default: userConfig.region, required: false, alias: "地区", }, { name: "endpoint", type: "input", default: userConfig.endpoint, required: false, alias: "自定义节点", }, { name: "proxy", type: "input", default: userConfig.proxy, required: false, alias: "代理", message: "http://127.0.0.1:1080", }, { name: "urlPrefix", type: "input", default: userConfig.urlPrefix, message: "https://img.example.com/bucket-name/", required: false, alias: "自定义域名", }, { name: "urlSuffix", type: "input", default: userConfig.urlSuffix || "", message: "例如?x-oss-process=xxx", required: false, alias: "设定网址后缀", }, { name: "pathStyleAccess", type: "confirm", default: userConfig.pathStyleAccess || false, message: "enable s3ForcePathStyle or not", required: false, alias: "ForcePathStyle", }, { name: "rejectUnauthorized", type: "confirm", default: userConfig.rejectUnauthorized || true, message: "是否拒绝无效TLS证书连接", required: false, alias: "拒绝无效TLS证书连接", }, { name: "acl", type: "input", default: userConfig.acl || "public-read", message: "上传资源的访问策略", required: false, alias: "ACL 访问控制列表", }, { name: "disableBucketPrefixToURL", type: "confirm", default: userConfig.disableBucketPrefixToURL || false, message: "开启 `pathStyleAccess` 时,是否要禁用最终生成URL中添加 bucket 前缀", required: false, alias: "Bucket 前缀", }, ]; }; const handle = async (ctx) => { const userConfig = ctx.getConfig("picBed.aws-s3-own"); if (!userConfig) { throw new Error("Can't find amazon s3 uploader config"); } let urlPrefix = userConfig.urlPrefix; if (urlPrefix) { urlPrefix = urlPrefix.replace(/\/?$/, ""); if (userConfig.pathStyleAccess && !userConfig.disableBucketPrefixToURL) { urlPrefix += "/" + userConfig.bucketName; } } const client = uploader_1.default.createS3Client(userConfig); const output = ctx.output; const tasks = output.map((item, idx) => uploader_1.default.createUploadTask({ client, index: idx, bucketName: userConfig.bucketName, path: (0, utils_1.formatPath)(item, userConfig.uploadPath), item: item, acl: userConfig.acl, urlPrefix, trimmedUploadPath: (0, utils_1.formatPath)(item, userConfig.trimmedUploadPath), })); let results; try { results = await Promise.all(tasks); } catch (err) { ctx.log.error("上传到 S3 存储发生错误,请检查网络连接和配置是否正确"); ctx.log.error(err); ctx.emit("notification", { title: "S3 存储上传错误", body: "请检查配置是否正确", text: "", }); throw err; } for (const result of results) { const { index, url, imgURL } = result; delete output[index].buffer; delete output[index].base64Image; output[index].imgUrl = `${imgURL}${(userConfig === null || userConfig === void 0 ? void 0 : userConfig.urlSuffix) || ''}`; output[index].url = `${url}${(userConfig === null || userConfig === void 0 ? void 0 : userConfig.urlSuffix) || ''}`; } return ctx; }; const register = () => { ctx.helper.uploader.register("aws-s3-own", { handle, config, name: "Amazon S3 Own", }); }; return { register, }; };