You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JS中批量下载文件并打包为文件夹?

实现多文件批量下载到同一文件夹的方案

浏览器本身没有权限直接指定文件的下载路径,也没法强制让多个独立下载的文件自动进入同一个文件夹。要实现「一次性下载到同一文件夹」的效果,最靠谱的方式是把所有文件打包成一个ZIP压缩包,用户下载这个ZIP后,解压就能得到同一文件夹下的所有文件。

下面是基于你现有代码的实现方案,用到JSZip库来处理压缩打包:

步骤1:引入JSZip

先安装JSZip依赖(项目环境):

npm install jszip

或者通过CDN引入(纯前端页面场景):

<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script>

步骤2:编写批量下载函数

基于你原有的downloadFile逻辑,扩展出批量打包下载的函数:

import JSZip from 'jszip'; // 项目环境需要导入,CDN引入则无需这行

export async function downloadFilesToFolder(fileList: {url: string, filename: string}[], folderName: string) {
  const zip = new JSZip();
  const folder = zip.folder(folderName); // 创建ZIP内的目标文件夹

  // 遍历文件列表,逐个获取并添加到ZIP文件夹中
  for (const file of fileList) {
    const res = await fetch(file.url);
    const blob = await res.blob();
    folder?.file(`${file.filename}.pdf`, blob); // 将文件存入ZIP内的指定文件夹
  }

  // 生成ZIP压缩包的Blob对象
  const zipBlob = await zip.generateAsync({type: 'blob'});
  const zipUrl = window.URL.createObjectURL(zipBlob);

  // 触发ZIP包的下载
  const a = document.createElement('a');
  a.style.display = 'none';
  a.href = zipUrl;
  a.download = `${folderName}.zip`; // 下载后的ZIP文件名

  document.body.appendChild(a);
  a.click();
  document.body.removeChild(a);

  // 清理URL对象,避免内存泄漏
  window.URL.revokeObjectURL(zipUrl);
}

使用示例

调用函数时,传入文件列表和目标文件夹名称即可:

// 示例文件列表
const files = [
  {url: 'https://example.com/file1.pdf', filename: '文件1'},
  {url: 'https://example.com/file2.pdf', filename: '文件2'},
  {url: 'https://example.com/file3.pdf', filename: '文件3'},
];

// 批量下载到名为「我的PDF文档」的文件夹(实际是ZIP包内的文件夹)
downloadFilesToFolder(files, '我的PDF文档');

注意事项

  • 要确保所有文件的URL支持跨域请求(CORS),否则fetch会失败;同域文件则无此限制。
  • 若文件体积较大,批量打包会占用较多浏览器内存,建议控制单次下载的文件数量。

内容的提问来源于stack exchange,提问作者Berry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 23:30:01