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


    使用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)

  • 相关阅读:
    mac zsh选择到行首的快捷键
    phalcon下拉列表
    tinycore remaster方法
    bundle安装方法
    centos7安装avahi
    pydoc介绍
    macosx下apache的默认用户为daemon
    centos配置ssh免密码登录后,仍提示输入密码
    xampp默认项目文件夹htdocs
    微信开发:"errcode": -1000,"errmsg": "system error"错误的解决办法
  • 原文地址:https://www.cnblogs.com/xiaofenguo/p/15673016.html
Copyright © 2020-2023  润新知