• js实现大文件上传——分片上传方法


    当前端在开发过程中遇到上传文件需求,如果是上传头像、图片小文件之类的,可以正常按上传流程处理。但是当遇到上传大文件需求时,几个G或者十几个G,那么需要将这么大的文件分割成许多小片段分别上传,这种实现思路称为分片上传。

    实现分片上传,精髓就是将文件分割成小片段,此时我们需要用到FormData对象和Bolb对象。

    核心代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Document</title>
      <style>
      
      </style>
    </head>
    <body>
      <input type="file" name="file" id="file">
      <button id="upload" onClick="upload()">上传</button>
      <script>
          //设置每个切片大小
          let bytesPerPiece = 1024*1024
          //上传文件函数
          function upload(){
              //获取上传文件
              let file = document.getElementById('file').files[0];
              let start = 0, end, index = 0, filesize = file.size, name = file.name;
              //计算切片总数
              let totalPieces = Math.ceil(filesize/bytesPerPiece);
              while(start < totalPieces){
                  end = start + bytesPerPiece;
                  if(end > filesize){ 
                      end = filesize
                  }
                  let chunk = file.slice(start, end);
                  let formData = new FormData();
                  formData.append('file', chunk, filename);
                  //原生js发请求
                  //   let xhr = new XMLHttpRequest();
                  //   xhr.onreadystatechange = function(){
                  //       if(this.readyState == 4 && this.status == 200){
    
                  //       }
                  //   }
                  //   xhr.open('post', '/api/upload', true);
                  //   xhr.send(formData);
                  // 使用jquery,需要将contentType,processData设置为false
                //   $.ajax({
                //       url: '/api/upload',
                //       type: 'post',
                //       data: formData,
                //       processData: false,
                //       contentType: false
                //   }).success(res=>{
    
                //   }).error(err=>{
    
                //   })
              }
          }
      </script>
    </body>
    </html>

    附加: 断点续传

    理解:断点续传,就是在我们上传过程中由于意外原因断网断电情况让上传终止了,那么上传的是不完整的,我们需要向服务器查询一下相同名字的文件大小,然后将上传位置设置成这个大小即可。

  • 相关阅读:
    php 使用正则匹配中文 返回结果
    怎样判断一个jquery对象是否为空jquery对象
    关于tp5.0中对象数组转换普通数组使用助手函数collection而不是toArray
    PHP 面试题三
    PHP 面试题二
    PHP 面试题 一
    laravel 学习笔记 —— 神奇的服务容器
    ubuntu下安装opencv库+Python2.7环境安装及开发摄像头拍照应用
    Linux内核分析(七)----并发与竞态
    Linux内核分析(六)----字符设备控制方法实现|揭秘系统调用本质
  • 原文地址:https://www.cnblogs.com/zmyxixihaha/p/13534120.html
Copyright © 2020-2023  润新知