如何使用JSZip在内存中解压Zip格式的File对象?
内存Zip File对象解压方案
全程无需写入本地物理磁盘,所有操作都在内存中完成,以下分两种主流运行环境给出实现方式:
浏览器端(JavaScript)
使用JSZip库实现:
- 先通过npm安装
jszip包,或者引入预构建的JS文件到项目中 - 直接传入内存中的Zip File对象进行解析,遍历条目后转换为File对象存入数组
代码示例:
import JSZip from 'jszip'; async function extractZipToFileArray(zipFile) { const resultArray = []; // 直接读取内存中的Zip对象,无本地IO操作 const zipInstance = await JSZip.loadAsync(zipFile); for (const [filePath, entry] of Object.entries(zipInstance.files)) { // 跳过目录类条目 if (entry.dir) continue; // 读取条目内容转为Blob,再构造为内存File对象 const entryBlob = await entry.async('blob'); const entryFile = new File([entryBlob], filePath, { type: entryBlob.type }); resultArray.push(entryFile); } return resultArray; } // 调用示例:yourZipFile为你已有的内存Zip格式File对象 const inMemoryFileArr = await extractZipToFileArray(yourZipFile);
Node.js 环境
使用adm-zip库实现:
- 先通过npm安装
adm-zip包 - 将内存中的Zip File转为Buffer后直接传入adm-zip解析,无需生成本地文件
代码示例:
const AdmZip = require('adm-zip'); // Node.js 18及以上版本内置File构造函数,低版本可引入对应polyfill const { File } = require('buffer'); async function extractZipToFileArray(zipFile) { const resultArray = []; // 把内存中的Zip File转为Buffer const zipBuffer = Buffer.from(await zipFile.arrayBuffer()); // 直接用内存Buffer初始化AdmZip,无本地读写 const zipInstance = new AdmZip(zipBuffer); const entries = zipInstance.getEntries(); entries.forEach(entry => { if (entry.isDirectory) return; // 读取条目内容为Buffer,构造内存File对象 const entryContent = entry.getData(); const entryFile = new File([entryContent], entry.entryName); resultArray.push(entryFile); }); return resultArray; } // 调用示例:yourZipFile为你已有的内存Zip格式File对象 const inMemoryFileArr = await extractZipToFileArray(yourZipFile);
两种方案的所有数据处理都在内存中完成,不会产生任何本地临时文件,符合需求。
内容的提问来源于stack exchange,提问作者Notorious776
相关产品推荐
相关产品推荐

