JavaScript 大文件切片
今天看到一个问题:
前端上传文件很大,如果链接超时了,或者是网络断了,都会导致文件上传失败,这个无疑很消耗资源的
想了想这不就是文件切片吗?
大概说一下思路和代码处理吧!
界面就简单画一下
记录上传
<progress id="Progressupload"
value="0">
</progress>
使用标签
<input type="file"
id="Uplodervide"
value="选择视频">
记录信息
<span id="uploadinfo"></span>
点击上传
<button id="uploadBtn"> 上传视频</button>
思路
我们假设上传一个.mp4文件 大家应该都知道我们上传文件的时候 可以通过下面的代码获取文件
const ouploader = document.getElementById('Uplodervide')
const { files: [file] } = ouploader
我们拿到文件之后打印处理file
会发现里面有一个file.size 属性 记录了文件大小
在此之前先了解一个东西
File API 里面的 FileReader类型里的readAsText,readAsDataURL等方法来读取文件File。但是如果一个文件十分大的时候,或者只需要读取部分内容,如(文本文件),那么我们就可以通过这次介绍的slice方法对文件进行分割成二进制Blob对象。
这时候思路清晰了!
我们定义每一次上传文件的大小,不停去请求上传api,最后将拼接
uploadedSize=0
CHUNK_SIZE=64*1024 (定上传文件的大小)
const fileChunk = file.slice(uploadedSize, uploadedSize + CHUNK_SIZE)
注意:这个地方一定要去记录这个uploadedSize的值
uploadedSize += fileChunk.size
然后再去调用api上传
axios.post(A_URL.UPLOAD_VIDEO, formData)
单文件切片的任务就完成了
@需要代码私我