文件切片上传

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<input type="file" id="input">
<button id="btn">上传</button>
<script>
  document.querySelector("btn").addEventListener("click",upload);
  let index = 0,  //切片索引
    chunkSize = 1024;//文件以1024个字节进行切片
  function upload() {
    const file = document.querySelector("#input").files[0];
    const [fileName, ext] = file.name.split("."); //获取文件名和文件后缀
    let start = index * chunkSize;  //文件上传的起始位置
    if(start > file.size) { //如果文件上传的起始位置大于文件大小,就return掉,否则继续上传
      return
    }
    const blob = file.slice(start, start+chunkSize);  //根据起始位置,将文件切片
    const formData = new FormData();  //创建一个form数据对象
    const blobName = `${fileName}${index}.${ext}`;  //定义blob文件名
    const blobFile = new File([blob],blobName); //根据切片信息,创建file对象

    formData.append("file",blobFile); //上传接口的入参
    fetch("/upload", {  //文件上传
      method: "post",
      body: formData
    }).then(() => {
      index ++;
      upload(); //上传成功后,继续上传下一个切片
    })
  }
</script>
</body>
</html>
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值