如何使用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包,下载后用专门的解压插件处理:
步骤:
- 服务器将目标目录打包成zip文件
- 用
fileTransfer下载这个zip包到本地临时路径 - 用
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
相关产品推荐
相关产品推荐

