现在有一个批量下载的功能,需要将多个文件下载,如何下载显示进度条,进度条到100下载文件?
实现前端批量下载并显示进度条的核心步骤:
使用JSZip进行文件打包
import JSZip from 'jszip';
import { saveAs } from 'file-saver';
const zip = new JSZip();
进度计算逻辑
let loaded = 0;
const totalSize = files.reduce((sum, file) => sum + file.size, 0);
const updateProgress = (chunk) => {
loaded += chunk;
const percent = Math.min((loaded / totalSize) * 100, 100);
progressBar.value = percent.toFixed(2);
};
文件下载核心方法
const downloadFile = async (url, filename) => {
const response = await axios.get(url, {
responseType: 'blob',
onDownloadProgress: (progressEvent) => {
updateProgress(progressEvent.loaded);
}
});
zip.file(filename, response.data);
};
批量下载执行
const downloadAll = async (files) => {
try {
await Promise.all(files.map(file => downloadFile(file.url, file.name)));
const content = await zip.generateAsync({ type: 'blob' }, metadata => {
progressBar.value = 100 * metadata.percent; // 压缩阶段进度
});
saveAs(content, 'archive.zip');
} catch (error) {
console.error('下载失败:', error);
}
};
优化建议:
注意事项:
10 回答10.8k 阅读
7 回答11k 阅读
6 回答2.7k 阅读
2 回答11.6k 阅读✓ 已解决
5 回答4.5k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
2 回答2.3k 阅读✓ 已解决
安装
fflate
和file-saver
插件,分别是创建zip和保存文件。调用方法