文件分片上传
import md5 from 'md5';
import fetch from './fetch';
const baseUrl = '/xxx';
// 分片上传的公共接口
const separateFileUpload = data => {
return fetch({
url: `${baseUrl}/xxxx`,
method: 'post',
data,
headers: {
'Content-Type': 'multipart/form-data'
}
});
};
/**
* @description: 生成切片
* @param {*} file 文件
* @param {*} size 切片大小
* @return {*}
*/
// 默认按照10M切片
const createFileChunk = (file, size = 10 * 1024 * 1024) => {
const fileChunkList = [];
let cur = 0;
while (cur < file.size) {
fileChunkList.push({ file: file.slice(cur, cur + size) });
cur += size;
}
return fileChunkList;
};
/**
* @description: 分片上传
* @param {*} file 文件
* @return {*}
*/
export const handleFileChunkUpload = async file => {
const fileList = createFileChunk(file);
const { name, size } = file;
const md5Str = md5(`${name}_${new Date().getTime()}`);
// 不变的参数
const params = {
chunks: fileList.length,
size,
name,
md5: md5Str
};
await Promise.all(
fileList.map(({ file }, index) => {
// 每次都是新的formData
const formData = new FormData();
formData.append('file', file);
formData.append('chunk', index);
for (const key in params) {
formData.append(key, params[key]);
}
return separateFileUpload(formData);
})
);
const data = {
fileName: name,
fileNameMd5: md5Str,
fileSize: size
};
// 保存时需要的标识
return data;
};
在项目中使用还是得搭配async和await使用
const handleFile = async file => {
const data = await handleFileChunkUpload(file)
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现