返回
前端分片上传实现:阿里云SDK+React精解
前端
2023-12-14 22:14:08
在互联网飞速发展的今天,前端开发面临着越来越多海量文件上传的需求,传统的文件上传方式对于大型文件的传输效率低下且容易出错。阿里云提供的分片上传技术可以有效解决此类问题,本文将详细介绍如何使用阿里云SDK结合React框架实现前端分片上传。
分片上传原理
分片上传将大文件切割成多个较小的分片,分批上传到OSS(对象存储服务),OSS会根据分片信息组装成完整的文件。与传统上传方式相比,分片上传具有以下优势:
- 高可靠性: 即使在网络不稳定的情况下,也可以通过重传机制保证数据完整性。
- 断点续传: 上传中断后,可以从断点处继续上传,避免重新上传。
- 并发上传: 分片上传支持多线程并发上传,大大提升上传效率。
实战:阿里云SDK+React实现分片上传
1. 安装阿里云SDK
npm install @alicloud/oss --save
2. 引入React组件
import React, { useState, useEffect } from "react";
3. 创建分片上传组件
const FileUpload = () => {
const [file, setFile] = useState(null);
const [progress, setProgress] = useState(0);
useEffect(() => {
// 监听文件选择事件
const input = document.querySelector("input[type=file]");
input.addEventListener("change", handleFileSelect);
}, []);
const handleFileSelect = (e) => {
const file = e.target.files[0];
setFile(file);
};
const startUpload = async () => {
const client = new OSS({ ...ossConfig }); // 使用阿里云SDK配置OSS客户端
const filePath = `folder/${file.name}`; // 自定义文件路径,可根据实际业务修改
// 分片上传,返回一个Promise
const uploadTask = client.multipartUpload(filePath, file, {
parallel: 5, // 并发上传分片数
partSize: 10 * 1024 * 1024, // 每个分片大小,单位为字节
});
// 监听分片上传进度
uploadTask.on("part-uploaded", (part) => {
// 计算上传进度
const currentProgress = (part.loaded * 100) / file.size;
setProgress(currentProgress);
});
// 分片上传完成
uploadTask.then((result) => {
console.log("文件上传成功!", result);
});
};
return (
<div>
<input type="file" />
<button onClick={startUpload}>上传</button>
<div>进度:{progress}%</div>
</div>
);
};
4. 配置OSS参数
const ossConfig = {
region: "your-region",
accessKeyId: "your-access-key-id",
accessKeySecret: "your-access-key-secret",
bucket: "your-bucket-name",
};