大文件上传

文章介绍了大文件上传时遇到的慢速问题,提出了解决方案——通过切片上传(分片上传)来提高效率。利用FormData和axios,将大文件分割成小块进行逐个上传,并通过断点续传确保上传的完整性和效率。最后,后端负责合并分片,完成整个文件的上传。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 文件上传方式

    1. HTML表单的方式
    2. FormData对象
      const formdata = new FormData()
      form.append('file', 值)
  2. 为什么大文件上传:在一些文件比较大时,使用普通的方式上传太慢,影响用户体验

  3. 解决方法

    1. 切片上传(分片上传)

    2. 实现代码:

      const token = ''
              const upload = (file, chunkSize) => {
                  if (!file) {
                      alert('请选择文件')
                      return
                  }
                  const start = 0 // 开始的字节
                  const end = chunkSize // 结束字节
                  const chunkTotal = Math.ceil(file.size / chunkSize) // 分片总数量
                  let uploadChunks = 0 // 当前分片
                  console.log(uploadChunks)
                  const uploadChunk = () => {
                      if (uploadChunks < chunkTotal) {
                          const files = file.slice(start, end)
                          const formdata = new FormData()
                          formdata.append('bigfile', files, file.name + '-' + uploadChunks)
                          axios({
                              method: 'post',
                              url: 'http://43.136.34.132/api/bigfile',
                              headers: {
                                  'Content-Type': 'multipart/form-data',
                                  'Authorization': token
                              },
                              data: formdata,
                          }).then(res => {
                              start = end + start
                              end = start + chunkSize
                              uploadChunks++
                              uploadChunk()
                          })
                      } else {
                          // 开始后的
                          axios({
                              method: 'get',
                              url: 'http://43.136.34.132/api/mergefile',
                              params: { filename: file.name },
                          }).then(res => {
                              console.log('res', res)
                          })
                      }
                  }
                  uploadChunk()
              }
    3. 断点续传:

      1. 上传前,先将文件名传递给后端,由后端判断是否有对应的分片文件,如果有返回对应分片文件的数组。

      2. 前端将上传的切片筛选出来,再将剩下未成功上传的切片上传。

      3. 最后后端将切片合并,完成整个文件的上传。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值