大文件分片与切割

图片上传或小文件上传用不到分片与切割,通常使用post方式用formData的方式直接传给后台,然后后端再直接发送给文件服务器,但如果文件很大或者超大,则可能会导致浏览器崩溃,因为浏览器端上传文件是使用内寸

uploadFile(file){
/* 1. 文件切片
*/
 // file:文件对象
 // chunkSize: 规定的总大小
 // chunkNum:要分的块数
      const chunkSize = 10 * 1024 * 1024; //    10MB一片,可以根据需求自定义
      let chunkNum;
      if (file.size <= chunkSize) {
        chunkNum = 1;
      } else {
        chunkNum = Math.ceil(file.size / chunkSize); //这里使用进一法取天花板函数,防止最后一块不够分
      }
console.log(`chunkNum`, chunkNum);//到这里切片结束了 chunknum就是要切的份数

/* 2. 文件切割
      // start:开始数
      // end : 结束数
*/
        let start = 0,
        end = 0,
        chunkList = [];
      //循环 记得终止条件
      while (start <= file.size) {
        end = start + chunkSize;
        if (end > file.size) {
          end = file.size;
        }
        let chunk;
        if (file.size <= chunkSize) {
          chunk = file.slice(start, file.size); // 本质上 file是属于BLOB类的,因而也有了对应的slice方法
        } else {
          chunk = file.slice(start, end);
        }
        start = end;
        chunkList.push(chunk);
        console.log(`chunk`, chunk);
        if (start === file.size) {
          break;
        }
      }
}

以上.

作者:致爱丽丝
本文版权归作者和博客园共有,欢迎转载,但必须在文章页面给出原文链接并标名原文作者,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/hjk1124/p/15084184.html