批量下载功能,下载压缩包

注意:
先安装 npm 安装
jszip
file-saver
 
/**
 * 下载并压缩文件到 ZIP 文件中
 * @param urls 要下载的文件的 URL 数组
 * @param rootFolderName ZIP 文件中的根文件夹名称
 * @param zipFileName 生成的 ZIP 文件的名称
 * @returns Promise<void> 下载并生成 ZIP 文件完成后解析
 */
async function downloadAndZipFiles(
  urls: string[],
  rootFolderName: string,
  zipFileName: string = "files.zip"
): Promise<void> {
  const zip = new JSZip();

 
import JSZip from "jszip";
import { saveAs } from "file-saver";
 
// 遍历 URL 数组并下载文件
  const downloadPromises: Promise<void>[] = urls.map((url) => {
    return fetch(url)
      .then((response) => {
        if (!response.ok) {
          throw new Error(`Failed to fetch ${url}: ${response.statusText}`);
        }
        return response.blob();
      })
      .then((blob) => {
        // 从 URL 中提取文件名(假设 URL 是有效的,且文件名在路径末尾)
        const fileName: string = url.split("/").pop() || "";
        // 将文件添加到 ZIP 的指定文件夹中
        zip.folder(rootFolderName).file(fileName, blob);
      });
  });

  // 等待所有文件下载完成
  await Promise.all(downloadPromises);

  // 生成 ZIP 文件
  const content: Blob = await zip.generateAsync({ type: "blob" });

  // 触发下载
  saveAs(content, zipFileName);
}
 
const pdfUrls=['http://23432432.doc','http://23432432.doc']
//调该方法,传入要下载得url ,文件名称,压缩包名称
const downloadAllAsZip = () => {
  downloadAndZipFiles(pdfUrls.value, "my_files", "flattened_files.zip")
    .then(() => {
      console.log("ZIP 文件下载完成!");
    })
    .catch((error) => {
      console.error("发生错误:", error);
    });
};
posted @ 2025-05-13 09:42  shuihanxiao  阅读(20)  评论(0)    收藏  举报