当前位置: 首页 > news >正文

阿里云oss上传文件 普通上传和分片上传方法封装

1.导入模块:
Axios:用于发起HTTP请求。
ali-oss:阿里云OSS的SDK。
SparkMD5:用于计算文件的MD5值。
2.全局变量:
ossCredentials:用于缓存OSS凭证。
expireTime:凭证过期的时间戳。

3.getOssUploadKey 函数:
作用:获取OSS的上传凭证(包括AccessKeyId, AccessKeySecret, SecurityToken)。
逻辑:如果当前缓存的凭证未过期,则复用;否则,通过API获取新的凭证,并设置过期时间(当前时间+3500秒,约58分钟)。
4.uploadFile 函数:

作用:普通上传文件到OSS。
步骤: a. 获取OSS凭证。 b. 创建OSS客户端实例。 c. 生成文件名(使用路径、原始文件名和MD5值)。 d. 调用client.put方法上传文件。 e. 返回上传后的文件名(在OSS中的完整路径)。
5.uploadFileChunk 函数:

作用:使用分片上传方式上传大文件。
步骤: a. 获取OSS凭证。
b. 创建OSS客户端实例,并配置使用分片上传(useFetch, fetchOptions)。 c. 生成文件名。
d. 配置分片上传选项(超时、并发数、分片大小、进度回调、元数据、MIME类型等)。
e. 调用client.multipartUpload进行分片上传。
f. 返回文件的完整URL。
错误处理:捕获并打印错误,然后抛出。
6.base64ImgtoFile 函数:

作用:将Base64编码的图片字符串转换为File对象。
步骤:解析Base64字符串,获取MIME类型,将Base64字符串转换为二进制数据,然后创建File对象。
7.getFilePath 函数:

作用:生成文件的存储路径。
逻辑:如果提供了name(可能是MD5值),则使用name加上原始文件后缀;否则,使用时间戳和随机数生成文件名,再加上原始文件后缀。
8.getFileNumber 函数:

作用:生成一个随机的文件名(由当前时间戳和一个8位随机数组成)。
9.getFileSuffix 函数:

作用:从原始文件名中提取文件后缀(包括点,例如:“.jpg”)。
10.calculateMD5 函数:

作用:计算文件的MD5值(使用分块计算,避免内存溢出)。
步骤:将文件分割成2MB的块,逐块读取并计算MD5,最后合并得到整个文件的MD5。

以下是全篇代码:upload.js

import Axios from 'axios';
let OSS = require('ali-oss');
let SparkMD5 = require('spark-md5');
//oss凭证复用let ossCredentials = null;
let expireTime = 0;
export async function getOssUploadKey() {// // 有效期内复用凭证if (ossCredentials && Date.now() < expireTime) {return { data: ossCredentials };}let api = 'xxxxxx; /* 获取  accessKeyId,accessKeySecret,stsToken*/let res = await Axios.get(api);ossCredentials = res;// // 假设凭证过期时间为1小时(根据实际响应调整)expireTime = Date.now() + 3500 * 1000;return res;
}// 文件上传OSS
export async function uploadFile(path, file, md5) {const response = await getOssUploadKey();let credentials = response.data;const client = new OSS({// 将<YOUR_BUCKET>设置为OSS Bucket名称。bucket: 'xxxx',// 将<YOUR_REGION>设置为OSS Bucket所在地域,例如region: 'oss-cn-hangzhou'。region: 'oss-cn-beijing',accessKeyId: credentials.AccessKeyId,accessKeySecret<
http://www.dtcms.com/a/310279.html

相关文章:

  • Unity UI的未来之路:从UGUI到UI Toolkit的架构演进与特性剖析(7)
  • 小杰数据结构(four day)——藏器于身,待时而动。
  • PNP机器人机器人学术年会展示灵巧手动作捕捉方案。
  • 【高等数学】第七章 微分方程——第六节 高阶线性微分方程
  • C# StringBuilder类及其使用方法
  • 【LeetCode 热题 100】394. 字符串解码
  • 合并对象 递归注意对象的合并时机
  • 20257月29日-8月2日训练日志
  • Codeforces Round 1040 (Div. 2)(补题)
  • Java函数式编程之【基本数据类型流】
  • Thymeleaf 模板引擎原理
  • 删除MicroGame
  • 设计模式之职责链模式
  • Android 中 Intent 的显式和隐式使用方式
  • Alpine Linux 设置镜像的时区
  • ONLYOFFICE 深度解锁系列.14-如何在ONLYOFFICE表格中调用异步API,集成外部数据源
  • R语言基础图像及部分调用函数
  • MyEclipse启动OutOfMemoryError内存溢出
  • 笔试——Day25
  • 【数据结构入门】顺序表
  • linux81 shell通配符:[list],‘‘ ``““
  • AI数字人:会“呼吸”的虚拟人如何改变我们的世界?
  • 倒计时!2025国自然放榜时间锁定
  • DreamBoards 借助 DreamHAT+ 雷达插件为 Raspberry Pi 提供 60GHz 毫米波雷达
  • 使用Excel解析从OData API获取到的JSON数据
  • AR智能巡检系统:制造业设备管理的效率革新
  • 【难点】敬语
  • 2025年文生图模型stable diffusion v3.5 large的全维度深度解析
  • Altium 移除在原理图之外的元器件
  • Vue3 Vue3中的响应式原理