在遇到较大文件上传时往往需要对文件进行分割上传,整理一小段文件分割例子
<input type='file' id='fileSelector' />
<button onclick="sliceFile">分割</button>
<script>
let SLICE_SIZE = 1024 * 1024;
function sliceFile() {
let fileSelector = document.querySelector('#fileSelector');
if (fileSelector.value == '') {
alert('请选择要分割的文件');
return;
}
// 这个file继承自Blob对象
let file = fileSelector.files[0];
let fileSize = file.size;
if (fileSize > SLICE_SIZE){
// 计算需要分几份
let sliceCount = Math.ceil(fileSize / SLICE_SIZE);
for (let i = 0; i < sliceCount; ++i) {
// 计算分片起始位置
let start = i * SLICE_SIZE;
// 计算分片结束位置
let end = start + SLICE_SIZE;
// 最后一片特殊处理
if (end > fileSize) {
end = fileSize;
}
let newBlob = file.slice(start, end);
// balabala 业务代码
}
return;
}
// 不需要分割
// balabala 业务代码
}
</script>
主要使用的是 Blob对象的slice方法
Blob.slice(startIndex, endIndex);
slice方法返回一个新的Blob对象