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

NodeJS中adm-zip的addFile方法如何保留文件原始时间戳?

解决adm-zip压缩时保留文件原始时间戳的问题

你之前直接把Date对象作为addFile的第四个参数不生效,是因为addFile的第四个参数是配置选项对象,不是单独的日期参数。正确的做法是把原始时间戳放在选项对象的date属性里传入。

手动指定原始时间戳的写法

先通过fs.stat获取文件的原始修改/创建时间,再传入addFile:

const AdmZip = require('adm-zip');
const fs = require('fs');

const zip = new AdmZip();
const targetFile = './your-file.txt';

// 获取文件的原始修改时间(也可以用birthtime获取创建时间)
const fileStats = fs.statSync(targetFile);
const originalTimestamp = fileStats.mtime;

// 读取文件内容
const fileContent = fs.readFileSync(targetFile);

// 调用addFile时,第四个参数传包含date属性的对象
zip.addFile(
  'compressed-file-name.txt', // 压缩包内的文件名
  fileContent,                // 文件内容
  '可选的文件注释',            // 注释(可选)
  { date: originalTimestamp } // 配置选项,指定原始时间戳
);

// 生成压缩包
zip.writeZip('./output.zip');

更简便的方案:直接添加本地文件

如果你的需求是压缩本地已存在的文件,直接用addLocalFile方法即可——它会自动读取文件的原始时间戳,不需要手动配置:

const AdmZip = require('adm-zip');
const zip = new AdmZip();

// 直接添加本地文件,自动保留原始时间
zip.addLocalFile('./your-file.txt');
zip.writeZip('./output.zip');

补充说明

addFile的参数签名其实是:
addFile(name: string, content: Buffer | string, comment?: string, options?: ZipEntryOptions)
其中ZipEntryOptions类型里包含date字段,用来设置压缩包内文件的时间戳。之前直接传Date对象,相当于把它当作了options但没有正确设置属性,所以库没有识别到时间参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:35:59