1. file对象介绍
size 表示二进制对象的大小
type 表示二进制对象的类型
slice 方法 分割文件
2. file.slice介绍
第一个参数startByte表示文件起始读取Byte字节
第二个参数则是结束读取字节
文件切片上传
// 文件切片大小定为1MB
let idx = 1;
const bytesPerPiece = 1 * 1024 * 1024;
let startBytes = idx * bytesPerPiece;
let endBytes = startBytes + bytesPerPiece;
if (endBytes > file.size) {
endBytes = file.size;
}2.切割文件
// 切割文件,file对象的slice方法,文件分片的核心方法
const chunk = file.slice(startBytes, endBytes);
3.定义form对象
let params = new FormData();
params.set("chunk", idx);
params.set("chunks", totalPieces);
params.set("size", file.size);
params.set("name", file.name);
params.set("plupload", chunk);4.请求后台
// post请求 postForm 为自定义的form表单请求方法
postForm('url', params).then((res) => {// 根据后端返回是否完成
if (true) {
return res;
}
// 递归上传
this._uploadBig(file, ++idx);
})5.全部代码
/**
* @param {Object} file 文件
* @param {Number} idx 当前分片
* @return {Object}
*/
uploadBig(file, idx) {
// 文件切片大小定为1MB
const bytesPerPiece = 1 * 1024 * 1024;
let startBytes = idx * bytesPerPiece;
let endBytes = startBytes + bytesPerPiece;
if (endBytes > file.size) {
endBytes = file.size;
}
const totalPieces = Math.ceil(file.size / bytesPerPiece)
// 全部上传完毕后退出
if(startBytes >= file.size) {
return false;
}
// 切割文件,file对象的slice方法,文件分片的核心方法
const chunk = file.slice(startBytes, endBytes);
// 定义form对象
let params = new FormData();
params.set("chunk", idx);
params.set("chunks", totalPieces);
params.set("size", file.size);
params.set("name", file.name);
params.set("plupload", chunk);
// post请求 postForm 为自定义的form表单请求方法
postForm('url', params).then((res) => {
// 根据后端返回是否完成
if (true) {
return res;
}
// 递归上传
this._uploadBig(file, ++idx);
})
}

