前端大文件切片上传

文件切片上传的思路:

  1. 将大文件通过加密算法生成编码
  2. 找后端验证是否有此文件
  3. 若有此文件,则无需上传,若没有此文件,则将大文件分割成若干个切片
  4. 将若干个切片通过加密算法生成编码传给后端
  5. 所有分片上传结束后,走后端合并接口合并分片,则大文件上传成功。

文件切片上传

// 文件切割的大小
window.FILE_SLICE_SIZE = 1024 * 1024

async function sliceUpload(file){
  // 使用crc32加密算法,生成当前文件的唯一编码(这个编码在相同文件时生成编码时是一样的)
  let fileCrc32 = (await fileToCrc32(file))
  // 切片文件
  let sliceFileList = await createFileChunk(file,window.FILE_SLICE_SIZE)
  // 计算切片(使用crc32加密算法,生成每个分片的唯一编码)
  let sliceFileToCrc32List = await sliceFileToCrc32All(sliceFileList)

  // 创建一个分片上传失败队列,用于在上传失败时重新上传
  let sliceErrorList = []

  // 秒传接口,用来判断是否有此文件
  fileApass(file.name,fileCrc32).then(async (apassRes)=>{
    if(apassRes.code === 4648){ // 没有相同文件,正常上传
      for(let i=0;i<sliceFileToCrc32List.length;i++){
        // 检查是否存在切片(如果有此分片,则无需上传)
        let sliceRes = await axios.get(preResult.data.splitCheckUrl,{
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值