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
相关产品推荐
相关产品推荐

