首页 > 其他分享 >大文件、视频分片上传,断点续传

大文件、视频分片上传,断点续传

时间:2023-12-22 16:23:17浏览次数:44  
标签:断点续传 const formData let file 分片 上传

需求背景
再简单的需求,遇到巨大的任务量,也会变得很棘手
在项目中,难免会需要一些大的文件、视频上传,通常都会耗费很长的时间上传到服务器
然鹅,这其中不能出现任何的差错(网页刷新,关机、断网)之类的故障,一旦发生了,之前的努力都会付之东流,重新开始上传之路,这时候就体现出分片上传、断点续传的重要性了


1、分片上传
分片上传,就是将一个大的文件拆分成若干个小的文件,然后逐一进行上传,以缓解服务器的压力,
再通俗一点就是,把一张纸,撕成若干个小纸条,然后交给后端,后端再用胶水粘成一个完整的

将文件进行切割
async uploadFile (file) {
// file 获取当前上传的视频文件
let that = this
const CHUNK_SIZE = 1024 * 1024 * 20 // 每个块的大小为20MB
const chunks = Math.ceil(file.size / CHUNK_SIZE) // 计算文件分成多少块 总块数
let uploadedChunks = 0 // 已上传的块数
let uploadedBytes = 0 // 已上传的字节数
let progress = 0 // 上传进度

for (let i = 0; i < chunks; i++) {
const start = i * CHUNK_SIZE // 每块的起始位置
const end = Math.min(start + CHUNK_SIZE, file.size) // // 每块的末尾
const chunk = file.slice(start, end) // 将文件在指定的位置进行切割
const res = await that.uploadChunk(chunk, i, chunks, file.name) // 将每个模块执行上传方法
uploadedChunks++
uploadedBytes += end - start
progress = Math.floor(uploadedBytes / file.size * 20)
}

// 上传完成后的处理逻辑
console.log('上传完成')
},


上传单个模块
uploadChunk (chunk, index, totalChunks, fileName) {
let that = this
// 将chunk片段转换为File文件格式
let newChunk = new File([chunk], "分片文件", { type: "*", lastModified: Date.now() })
const formData = new FormData()
// 根据后端的需要,传参,文件上传传参:formData
formData.append('dir', 'cs')
formData.append('file', newChunk)
formData.append('blob_num', index)
formData.append('total_blob_num', totalChunks)
formData.append('blob_file_name', fileName)

return axios.post(baseURL, formData, {
headers: {
'Content-Type': 'multipart/form-data' // 文件上传格式
}
}).then(res => {
// 上传成功的处理
}).catch(err => {
console.log(err)
})
}


2、断点续传
只要弄明白了,分片上传,那断点续传就简单多了,还是前面的把文件分片

let uploadedChunks = 0 // 已上传的块数
1
每次上传的时候,给后端传一个状态(当前第几片),然后触发上传之前请求一次后端接口,看上一次给后端传了几个片段,将状态后面的片段上传给后端
这个就可以做上传的暂停,开始操作

参考文章:http://blog.ncmem.com/wordpress/2023/12/22/%e5%a4%a7%e6%96%87%e4%bb%b6%e3%80%81%e8%a7%86%e9%a2%91%e5%88%86%e7%89%87%e4%b8%8a%e4%bc%a0%ef%bc%8c%e6%96%ad%e7%82%b9%e7%bb%ad%e4%bc%a0/

欢迎入群一起讨论

 

 

标签:断点续传,const,formData,let,file,分片,上传
From: https://www.cnblogs.com/songsu/p/17921849.html

相关文章

  • vue实现大文件分片上传与断点续传到七牛云
    问题:前段时间做视频上传业务,通过网页上传视频到服务器。视频大小小则几十M,大则1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1、文件过大,超出服务端的请求大小限制;2、请求时间过长,请求超时;3、传输中断,必须重新上传导致前功尽弃;探索过程:1、原先咨询过组里的大佬给......
  • input 上传图片文件限制文件大小和宽高
    用h5 inputtype="file"上传图片文件html设置  拼接到需要的地方varcheckboxHtml='<formenctype="multipart/form-data">n'+<divclass="modal-body">n'+<divclass="my-img">+</div>n'+<......
  • Vue + Django 使用wangeditor 上传图片 显示跨域报错
    报错:newsDetailed:1 AccesstoXMLHttpRequestat'http://www.py32api.com:8000/users/uploadFile/'fromorigin'http://localhost:8080'hasbeenblockedbyCORSpolicy:RequestheaderfieldtokenisnotallowedbyAccess-Control-Allow-Head......
  • C# 通过SshNet上传下载文件
    会把本地文件夹压缩成 .tar.gz文件后上传usingICSharpCode.SharpZipLib.GZip;usingICSharpCode.SharpZipLib.Tar;usingRenci.SshNet;usingSystem;usingSystem.IO;usingSystem.Windows.Forms;namespacePack{publicdelegatevoidAddTextLog(stringlog);......
  • asp.net core 3.x 解决文件上传大小限制
    如在Kestrel服务器下可以选择在CreateHostBuilder方法中统一移除所有上传限制。也可在指定的action上添加[DisableRequestSizeLimit]属性解除限制。//第一种在CreateHostBuilder中添加配置。publicstaticIHostBuilderCreateHostBuilder(string[]args){......
  • vue+element 上传文件及文件夹
    有需求需要做一个上传压缩包及文件夹的需求,记性不好,记录一下。HTML使用的element的upload和form表单,dropdown下拉菜单<div><el-col:span="24"><el-form-itemlabel="材料路径:"prop="fileName"><el-col:span="21&qu......
  • django+vue实现文件夹上传
    最近学django的文件上下传,网上的文件夹上下传压根没有,找了好几个,报错一大堆,没有一个能用,花里胡哨,可气!!!下面这个方法是我刚刚用过的,分享给大家。前端vue非常简单,template部分<inputtype="file"id="twos"webkitdirectory/><el-buttontype="primary"@click="sumfolder">文件夹......
  • Python接口自动化之文件上传/下载接口详解
    〇、前言文件上传/下载接口与普通接口类似,但是有细微的区别。如果需要发送文件到服务器,例如:上传文档、图片、视频等,就需要发送二进制数据,上传文件一般使用的都是Content-Type:multipart/form-data数据类型,可以发送文件,也可以发送相关的消息体数据。反之,文件下载就是将二进制格式......
  • vue上传图片到指定文件夹
    vue代码<template><divclass="app-container"> <divclass="wenben"><el-upload:disabled="dis==0?true:false"class="upload-demo":action="uploadUrl":on-......
  • Spring Boot学习随笔- 文件上传和下载(在线打卡、附件下载、MultipartFile)
    学习视频:【编程不良人】2021年SpringBoot最新最全教程第十二章、文件上传、下载文件上传文件上传是指将文件从客户端计算机传输到服务器的过程。上传思路前端的上传页面:提交方式必须为post,enctype属性必须为multipart/form-data开发后端的Controller后端方法接收参数......