-
文件上传方式
- HTML表单的方式
- FormData对象
const formdata = new FormData() form.append('file', 值)
-
为什么大文件上传:在一些文件比较大时,使用普通的方式上传太慢,影响用户体验
-
解决方法
-
切片上传(分片上传)
-
实现代码:
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() }
-
断点续传:
-
上传前,先将文件名传递给后端,由后端判断是否有对应的分片文件,如果有返回对应分片文件的数组。
-
前端将上传的切片筛选出来,再将剩下未成功上传的切片上传。
-
最后后端将切片合并,完成整个文件的上传。
-
-
大文件上传
于 2023-03-24 15:14:27 首次发布