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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:45:04