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

NodeJS中无需保存.zip文件即可从其Buffer读取内部文件Buffer

结论

该需求完全可以实现,全程不需要将zip压缩包写入本地磁盘,所有解析、读取操作都可以在内存中完成。

实现方案

Node.js生态下有多个成熟的zip处理库支持直接从Buffer读取压缩包内容,以使用门槛最低的adm-zip为例,实现步骤如下:

  • 安装依赖:执行npm install adm-zip引入处理库
  • 调用API时将响应类型设置为二进制/ArrayBuffer,确保拿到完整的zip文件Buffer
  • 将拿到的zip Buffer直接传入zip解析实例,不需要写入本地临时文件
  • 遍历压缩包内的条目,跳过目录项后直接读取每个内部文件的Buffer即可
代码示例
const AdmZip = require('adm-zip');

/**
 * 从zip格式的Buffer中读取所有内部文件的Buffer数据
 * @param {Buffer} zipBuffer API返回的zip文件Buffer
 * @returns {Array<{fileName: string, fileBuffer: Buffer}>} 内部文件列表
 */
function extractFilesFromZipBuffer(zipBuffer) {
  // 直接基于内存中的Buffer初始化zip实例,无磁盘IO操作
  const zipInstance = new AdmZip(zipBuffer);
  const allEntries = zipInstance.getEntries();
  const fileList = [];

  for (const entry of allEntries) {
    // 跳过目录条目,仅处理文件
    if (entry.isDirectory) continue;
    fileList.push({
      fileName: entry.entryName, // 压缩包内的文件相对路径
      fileBuffer: entry.getData() // 直接获取对应文件的内存Buffer
    });
  }

  return fileList;
}

// 调用示例(以axios请求为例)
// const apiResponse = await axios.get('目标API地址', {
//   responseType: 'arraybuffer' // 必须设置,否则拿不到正确的二进制数据
// });
// const innerFiles = extractFilesFromZipBuffer(Buffer.from(apiResponse.data));
注意事项

如果使用其他HTTP请求库调用API,务必确认响应配置为返回二进制格式,避免默认按文本/JSON格式解析二进制数据导致文件损坏、解压失败。
除了adm-zip之外,yauzl、jszip等库也支持从Buffer读取zip内容,可根据自己的项目依赖情况选择。

内容的提问来源于stack exchange,提问作者T.H.Naseri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:21:18