import api from '@/api';
//切割大文件
function cutFile(file, cutSize) {
//分成多少份
let count = (file.size / cutSize) | 0,
fileArr = [];
for (let i = 0; i < count; i++) {
fileArr.push({
name: file.name + '.part' + (i + 1),
file: file.slice(cutSize * i, cutSize * (i + 1))
});
}
fileArr.push({
name: file.name + '.part' + (count + 1),
file: file.slice(cutSize * count, file.size)
});
return fileArr;
}
export function upload_big(file, cutSize, folderPath, ftpProvince) {
//判断上传文件是否超过需要切割的大小
if (file.size > cutSize) {
let fileArr = cutFile(file, cutSize); //切割文件
cutFile_upload(fileArr);
} else {
let formData = new FormData();
formData.append('isLast', 'true');
formData.append('file', file);
api.uploadFile(formData).then((res) => {
console.log(res);
});
return;
}
/*
* 切割文件上传,配合后台接口进行对接
* 传输参数:
* count -- 当前传输part的次数
* name -- 做过处理的文件名称
* file -- 上传的.part的切割文件
* isLast -- 是否为最后一次切割文件上传(默认值:"true" 字符串,只有最后一次才附加/不用分割直接上传)
* */
function cutFile_upload(fileArr, count) {
let formData = new FormData();
if (count == undefined) {
count = 0;
formData.append('count', count);
formData.append('name', fileArr[0].name);
formData.append('file', fileArr[0].file);
} else {
if (count === fileArr.length - 1) {
formData.append('isLast', 'true');
}
formData.append('count', count);
formData.append('name', fileArr[count].name);
formData.append('file', fileArr[count].file);
}
api.uploadFile(formData).then((res) => {
let currCount = Number(res.data);
if (currCount) {
if (currCount != fileArr.length) {
cutFile_upload(fileArr, currCount);
}
}
});
}
}
前端上传一个大文件,分成小份处理,一份份传给后端
最新推荐文章于 2022-10-28 21:36:21 发布