• 大文件前端简单分段上传


    使用vue和element-ui el-upload

    <el-upload action="#" :http-request='splitFile'></el-upload>
    
    fileNum:1;
    methods:{
      splitFile(file){
        const reader=new FileReader();
        reader.readAsArrayBuffer(file);
        let fileName=file.name;
        const blockSize=4*1024*1024;
        reader.addEventListener('load', async (e)=>{
          let nextSize=Math.min(this.fileNum*blockSize,file.size);
          if(file.size==nextSize){
            const percent=nextSize/file.size;
            const slice=e.target.result;
            try{ await this.uploadFile(slice,percent,fileName); }catch(err){ await this.uploadFile(slice,percent,fileName);  }//上传错误,重新上传          
          }
          while(file.size>nextSize){ 
            nextSize=Math.min(this.fileNum*blockSize,file.size);
            const percent=(blockSize*this.fileNum)/file.size;
            const slice=e.target.result.slice((this.fileNum-1)*blockSize,nextSize);
            try{ await this.uploadFile(slice,percent,fileName); }catch(err){ await this.uploadFile(slice,percent,fileName);  }//上传错误,重新上传 
            this.fileNum++;
          }
        });
      },
      uploadFile(slice,percent,fileName){
        let sliceOrder=this.fileNum-1;//上传的文件片段从0开始
        let fName=fileName.split(',');
        let sliceName=fname[0]+sliceOrder+'.'+fname[1];
        let sfile=new File([slice],sliceName);//文件片段转为 file类型
        const form=new formData();
        form.append('file',sfile);
        form.append('sliceOrder',sliceOrder);
        form.append('fileName',fileName);
         return uploadFile(form)
      }
    }

    总结:

    1 readAsArrayBuffer 得到的数据是arrayBuffer类型的,需要转为file    new File([file],fileName)

    2 上传的代码片段如果太大,会出现  failed to load response data,看不到请求体和返回数据,本人测试谷歌浏览器设置为5M不行,设置为4M就可以正常显示了(blockSize)

  • 相关阅读:
    HTML和XHTML知识总结
    理解margin-left:-100%
    git clean的用法
    vue路由传参的三种基本方式
    vertical-align属性
    纯CSS制作各种图形(多图预警)
    css伪元素:before和:after用法详解
    前端注册登录的业务流程
    Vue-cli 中为单独页面设置背景图片铺满全屏的方法
    vscode 开启对 webpack alias(文件别名) 引入的智能提示
  • 原文地址:https://www.cnblogs.com/xiaofenguo/p/15673016.html
Copyright © 2020-2023  润新知