52 lines
2.0 KiB
JavaScript
52 lines
2.0 KiB
JavaScript
"use strict";
|
|
const common_vendor = require("../../../common/vendor.js");
|
|
const utils_request = require("../../../utils/request.js");
|
|
const config_setting = require("../../../config/setting.js");
|
|
const computeSignature = (accessKeySecret, canonicalString) => {
|
|
return common_vendor.crypto.enc.Base64.stringify(common_vendor.crypto.HmacSHA1(canonicalString, accessKeySecret));
|
|
};
|
|
async function uploadOssByPath(filePath) {
|
|
return new Promise(async (resolve, reject) => {
|
|
const date = /* @__PURE__ */ new Date();
|
|
date.setMinutes(date.getMinutes() + 1);
|
|
const policyText = {
|
|
expiration: date.toISOString(),
|
|
// 设置policy过期时间。
|
|
conditions: [
|
|
// 限制上传大小。
|
|
["content-length-range", 0, 1024 * 1024 * 1024]
|
|
]
|
|
};
|
|
let sts = common_vendor.index.getStorageSync("sts");
|
|
let stsExpired = common_vendor.index.getStorageSync("stsExpiredAt");
|
|
if (!sts || stsExpired && common_vendor.dayjs().isBefore(common_vendor.dayjs(stsExpired))) {
|
|
const { data: { data: { credentials } } } = await utils_request.http.get(`${config_setting.SERVER_API_URL}/oss/getSTSToken`);
|
|
common_vendor.index.setStorageSync("sts", credentials);
|
|
common_vendor.index.setStorageSync("stsExpiredAt", credentials.expiration);
|
|
sts = credentials;
|
|
}
|
|
console.log(sts);
|
|
const [filename, ext] = filePath.split(".");
|
|
const key = `headers/${common_vendor.md5(filename + Math.random() * 1e5)}.${ext}`;
|
|
const policy = common_vendor.gBase64.encode(JSON.stringify(policyText));
|
|
const signature = computeSignature(sts.accessKeySecret, policy);
|
|
common_vendor.index.uploadFile({
|
|
url: "https://oss.wsdns.cn",
|
|
name: "file",
|
|
filePath,
|
|
formData: {
|
|
key,
|
|
policy,
|
|
OSSAccessKeyId: sts.accessKeyId,
|
|
signature,
|
|
"x-oss-security-token": sts.securityToken
|
|
},
|
|
success: () => {
|
|
resolve(`https://oss.wsdns.cn/${key}`);
|
|
},
|
|
error: (err) => reject(err)
|
|
});
|
|
});
|
|
}
|
|
exports.uploadOssByPath = uploadOssByPath;
|