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

如何使用cordova-plugin-file-transfer下载cordova.file.dataDirectory下的整个目录?

如何用cordova-plugin-file-transfer下载整个目录?

嘿,我看到你已经能用cordova-plugin-file-transfer成功搞定单个文件的下载了,不过这个插件本身并不支持直接下载整个目录,得咱们自己搭点额外逻辑来实现,给你两个实用的方案:

方案1:先拿文件清单,逐个下载

这个思路是先从服务器获取目标目录里所有文件的路径清单,然后遍历清单逐个调用download方法,同时处理好本地子目录的创建:

async downloadEntireDirectory() {
  console.log("开始下载整个目录");
  try {
    // 先请求服务器提供的文件清单接口(返回目录下所有文件的路径数组)
    const fileListResponse = await fetch('URL/media/images/file-list.json');
    const fileList = await fileListResponse.json(); 
    // 比如返回的JSON格式:["image1.png", "image2.jpg", "subfolder/image3.png"]

    // 遍历每个文件进行下载
    for (const relativeFilePath of fileList) {
      const remoteFileUrl = `URL/media/images/${relativeFilePath}`;
      const localFullPath = this.file.dataDirectory + 'images/' + relativeFilePath;

      // 先确保本地的父目录存在(处理子文件夹的情况)
      const parentDirPath = localFullPath.substring(0, localFullPath.lastIndexOf('/'));
      await this.file.createDir(parentDirPath, '', true); 
      // 第三个参数true表示目录不存在时自动创建

      // 执行下载
      const entry = await this.fileTransfer.download(remoteFileUrl, localFullPath);
      console.log(`${relativeFilePath} 下载完成: ${entry.toURL()}`);
    }
    console.log("整个目录下载完成!");
  } catch (error) {
    console.log("目录下载出错:", error);
  }
}

注意事项:

  • 你需要让服务器提供一个返回文件清单的接口,或者提前明确知道目录里的所有文件路径
  • 一定要处理子目录的创建,不然下载带子路径的文件会失败
  • 可以额外添加进度跟踪、失败重试的逻辑,提升下载的稳定性

方案2:下载压缩包后解压(大目录更高效)

如果目录里文件很多,逐个下载效率太低,更推荐把整个目录打成zip包,下载后用专门的解压插件处理:

步骤:

  1. 服务器将目标目录打包成zip文件
  2. 用fileTransfer下载这个zip包到本地临时路径
  3. 用cordova-plugin-zip插件将zip包解压到cordova.file.dataDirectory对应的目录
async downloadAndExtractDirectory() {
  console.log("开始下载并解压目录");
  try {
    const zipRemoteUrl = 'URL/media/images/images-directory.zip';
    const tempZipPath = this.file.dataDirectory + 'temp-images.zip';
    const targetExtractDir = this.file.dataDirectory + 'images/';

    // 第一步:下载zip压缩包
    const zipEntry = await this.fileTransfer.download(zipRemoteUrl, tempZipPath);
    console.log("Zip包下载完成");

    // 第二步:解压zip包(需要先安装cordova-plugin-zip)
    await new Promise((resolve, reject) => {
      (window as any).zip.unzip(
        tempZipPath, 
        targetExtractDir, 
        (progress: number) => {
          console.log(`解压进度: ${progress}%`);
        }, 
        (error: any) => {
          error ? reject(error) : resolve(true);
        }
      );
    });

    // 第三步:删除临时的zip文件
    await this.file.removeFile(this.file.dataDirectory, 'temp-images.zip');
    console.log("目录解压完成!");
  } catch (error) {
    console.log("下载解压出错:", error);
  }
}

注意事项:

  • 需要先安装解压插件:cordova plugin add cordova-plugin-zip
  • 服务器打包的zip结构要和你期望的本地目录结构一致,避免解压后路径混乱
  • 大压缩包要注意设备内存占用,做好错误捕获和处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:10:22