cadb
Version:
安卓/鸿蒙系统截图/录屏工具
87 lines (79 loc) • 2.74 kB
JavaScript
/**
* Created by Niki on 2024/8/3 20:59.
* Email: m13296644326@163.com
*/
const OSS = require('ali-oss');
const path = require('path');
const sizeOf = require('image-size');
const UUID = require('es6-uuid');
const {testUrl} = require('./constants');
const doTextFetch = require('../utils/doTextFetch');
const {getFileName} = require('../utils');
async function fetchStsConfig() {
const url = `${testUrl}/api/common/union/file/get_sts_token_for_oss_upload`;
return await doTextFetch(url);
}
/**
* 上传文件至阿里云OSS
* stsConfig为非必传, 但若在for循环场景中, 建议先获取一次stsConfig再传入, 以免多次请求获取stsConfig
*/
async function upload2OSS(filePath, stsConfig) {
if (!stsConfig) {
stsConfig = await fetchStsConfig();
}
const {accessKeyId, accessKeySecret, securityToken, bucketName} = stsConfig;
const client = new OSS({
// yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
region: 'oss-cn-shanghai',
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
accessKeyId,
accessKeySecret,
stsToken: securityToken,
// 填写Bucket名称。
bucket: bucketName,
timeout: 600000, // 设置超时时长为10分钟
});
try {
const sizeFileName = generateFileNameWithSize(
filePath,
getFileName(filePath),
);
// 填写OSS文件完整路径和本地文件的完整路径。OSS文件完整路径中不能包含Bucket名称。
// 如果本地文件的完整路径中未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
const result = await client.put(sizeFileName, path.normalize(filePath));
const {url} = result;
return url;
} catch (e) {
console.log(e);
}
return null;
}
/**
* 将-w100-h100后缀追加到文件名, 并使用uuid替换原始fileName
*/
function generateFileNameWithSize(filePath, fileName) {
let dimensions = {};
try {
dimensions = sizeOf(filePath);
} catch (err) {
// 其他类型文件会报错, 没关系
}
const {width, height} = dimensions;
// 使用正则表达式匹配文件名及扩展名
const regex = /(.*)(\.[^.]+)$/; // 匹配文件名和扩展名
const matches = fileName.match(regex);
if (!matches) {
// 如果没有匹配到,返回原始文件名
return fileName;
}
const extension = matches[2]; // 扩展名部分
// 创建新的文件名
if (width && height) {
return `${UUID(36, 36)}-w${width}-h${height}${extension}`;
}
return `${UUID(36, 36)}${extension}`;
}
module.exports = {
upload2OSS,
fetchStsConfig,
};