1、websoket
调用后台websoket接口,会返回下载的文件大小和文件总大小,进度就很好计算;
2、axios-onDownloadProgress
onDownloadProgress: async (progress: any) => {
console.log(‘返回一个对象’)
}
loaded / total就可以计算进度了;
3、ajax
ajx.onprogress(e=>{
console.log(e,2);
})
和axios类似
4、fetch
const videoUrl = 'video url'
const response = await fetch(videoUrl)
const reader = response.body.getReader()
const contentLength = +response.headers.get('Content-Length')
let receivedLength = 0
let chunks = []
while (true) {
const { done, value } = await reader.read();
if (done) {
break
}
chunks.push(value)
receivedLength += value.length
// 下载进度
console.log(`Reveived ${receivedLength} of ${contentLength}`)
}
const a = document.createElement("a");
a.style.display = 'none'
document.body.append(a)
const url = window.URL.createObjectURL(new Blob(chunks, { type: 'video/mp4'} ))
a.href = url
a.download = item.name
a.click()
document.body.removeChild(a)
window.URL.revokeObjectURL(url)