UNPKG

cadb

Version:

安卓/鸿蒙系统截图/录屏工具

87 lines (79 loc) 2.74 kB
/** * 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, };