前端JS之HTML利用XMLHttpRequest()和FormData()进行大文件分段上传

### 前端代码
<body>
<input type="file" name="video" id="file"  />
<input type="button" class="btn btn-info" id="sub" value="提交">

  <script>
    $("#sub").on("click",selfile())    #当提交按钮被点击时触发上传

    function selfile(){
      const LENGTH = 1024 * 1024 * 10;//每次上传的大小
      var file = document.getElementsByName('video')[0].files[0];//文件对象
      var filename=document.getElementsByName('video')[0].files[0].name;
      var totalSize = file.size;//文件总大小
      var start = 0;//每次上传的开始字节
      var end = start + LENGTH;//每次上传的结尾字节
      var fd = null;//创建表单数据对象
      var blob = null;//二进制对象
      var xhr = null;//xhr对象
      while(start < totalSize){
        fd = new FormData();//每一次需要重新创建
        xhr = new XMLHttpRequest();//需要每次创建并设置参数
        xhr.open('POST','/qqq/',false);
        blob = file.slice(start,end);//根据长度截取每次需要上传的数据
        fd.append('file_data',blob);//添加数据到fd对象中
        fd.append('filename',filename); //获取文件的名称
          fd.append("file_size",totalSize);
        xhr.send(fd);//将fd数据上传

        //重新设置开始和结尾
        start = end;
        end = start + LENGTH;

      }

     }

  </script>

</body>

##python后端路由视图函数代码:

def qqq(request):
        file_path = "c:aa.txt"
        with open(file_path,"ab") as f:
            for line in request.FILES.get("file_data"):
                f.write(line)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
前端上传zip大文件时,为了避免一次性上传整个文件耗费过多时间和带宽,可以采用分段传输的方式来进行上传。 首先,在前端界面上创建一个文件上传的表单,并将zip文件切割成多个较小的文件片段,比如每个片段大小设为1MB。 然后,通过JavaScript编写上传的逻辑代码。在选择文件后,将文件分割成多个片段,并逐个将这些片段进行上传。可以使用File API来处理文件的切割和上传。 在发送每个文件片段时,可以使用XMLHttpRequest对象创建一个HTTP请求,设置其方法为POST,并将片段内容作为请求的主体。同时,还需要设置请求头部信息,将文件片段的相关信息(如文件名、文件大小、当前片段的索引等)传递给后端。 后端接收到每个片段时,可以根据请求头部的信息进行处理,将所有片段保存在一个临时文件中。在接收到全部片段后,将这些片段合并成完整的zip文件。 在上传过程中,可以通过进度条或百分比来显示上传的进度,提升用户体验。 需要注意的是,由于分段上传可能会涉及到网络不稳定、断点续传等问题,所以在后端处理时,需要对每个片段进行校验,并确保文件的完整性。同时,可能需要实现重新上传未完成的片段的功能。 总的来说,前端上传zip大文件分段传输的关键点是将文件切割成多个片段,并通过HTTP请求逐个上传,再在后端进行合并操作。这样可以减少单次上传的负担,提高上传效率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值