阿里云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<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

低级前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值