Node.js 如何使用lambda中的节点js将我的文件添加到现有的zip文件夹?
我有一个从s3 bucket下载的zip文件夹。现在我的代码中有一个json文件,我想使用节点js代码将json文件添加到现有的zip文件中 在node js中是否有任何预先存在的用于执行此操作的模块 我尝试过,但无法将该文件添加到现有的zip文件夹中 对此有什么想法吗?下面是一个来自Node.js 如何使用lambda中的节点js将我的文件添加到现有的zip文件夹?,node.js,lambda,zip,Node.js,Lambda,Zip,我有一个从s3 bucket下载的zip文件夹。现在我的代码中有一个json文件,我想使用节点js代码将json文件添加到现有的zip文件中 在node js中是否有任何预先存在的用于执行此操作的模块 我尝试过,但无法将该文件添加到现有的zip文件夹中 对此有什么想法吗?下面是一个来自 因为上面的方法稍微长一点,所以唯一的其他选择是使用,在读取现有对象后创建一个新对象,添加文件,然后重新创建zip。然后,您可以选择删除原始zip文件。然而,它实际上并不是“附加”。这是一个折衷方案,因为涉及到流媒
因为上面的方法稍微长一点,所以唯一的其他选择是使用,在读取现有对象后创建一个新对象,添加文件,然后重新创建zip。然后,您可以选择删除原始zip文件。然而,它实际上并不是“附加”。这是一个折衷方案,因为涉及到流媒体。我找不到任何库可以内联执行此操作并修改已定稿的zip。下面是一个暴力方法,它经过以下步骤:
appendZip.js
//需要模块
常数fs=要求('fs');
常数fsp=fs
const-archiver=require('archiver');
const extract=require('extract-zip')
异步函数appendZip(源,回调){
试一试{
设tempDir=source+“-temp”
//创建临时目录(文件夹必须存在)
等待fsp.mkdir(tempDir,{recursive:true})
//提取到文件夹
等待提取(源,{dir:tempDir})
//删除原始邮政编码
等待fsp解除链接(来源)
//重新创建zip文件以将存档数据流式传输到
const output=fs.createWriteStream(源);
const archive=archiver('zip',{zlib:{level:9}});
//将归档数据导入文件
归档.管道(输出);
//将临时目录中的文件追加到归档文件的根目录中
目录(tempDir,false);
//回调以添加额外文件
callback.call(这个,归档)
//完成归档
等待存档。完成();
//删除临时文件夹
fs.rmdirSync(tempDir,{recursive:true})
}捕捉(错误){
//处理任何错误
console.log(错误)
}
}
用法
异步函数main(){
让source=\uu dirname+“/functions/func.zip”
等待appendZip(源,(存档)=>{
archive.file('data.json');
});
}
在回调中,您可以使用任何可用的方法将文件追加到存档中,例如:
//从流中追加文件
常量file1=uu dirname+'/file1.txt';
append(fs.createReadStream(file1),{name:'file1.txt'});
//从字符串中追加文件
append('string cheese!',{name:'file2.txt'});
//从缓冲区追加文件
const buffer3=Buffer.from('buff it!');
append(buffer3,{name:'file3.txt'});
//附加文件
archive.file('file1.txt',{name:'file4.txt'});
//附加子目录中的文件,并在存档中将其命名为“new subdir”
目录('subdir/','newsubdir');
//追加子目录中的文件,将其内容放在归档文件的根目录中
archive.directory('subdir/',false);
//从全局模式追加文件
archive.glob('subdir/*.txt');
进一步阅读
我在我的本地机器上试用了它,它在不解压缩现有目录的情况下工作。但唯一的问题是,添加的文件存在于内存中,如果需要永久查看更改,我们需要将其刷新回文件系统
// test.zip (contents)
// - pdfReader.py
// - white-cuts-on-black-forever.py
var AdmZip = require('adm-zip');
var zip = new AdmZip("test.zip"); // Could also give a buffer here (if it's in memory)
var data = Buffer.from(JSON.stringify({"a": 3, "b": "hello"}));
zip.addFile("data.json", data); // New file created from contents in memory
zip.addLocalFile("trigger.json"); // Local file in file system
zip.writeZip("test.zip");
// test.zip (contents after program execution)
// - data.json
// - trigger.json
// - pdfReader.py
// - white-cuts-on-black-forever.py
我建议您完成这项任务。据我所知,您想从
S3
bucket下载zip
文件,将JSON
文档合并到zip
的现有结构中(这意味着实际打开并阅读它)
使用JSZip
这可以通过4个步骤完成
- 使用方法直接加载
zip
- (可选)您可以使用为文件创建新文件夹
- 使用添加或更新文件
- 最后,可以用于生成作为nodejs流的完整zip文件,或者用于在当前文件夹级别生成完整的zip文件
// test.zip (contents)
// - pdfReader.py
// - white-cuts-on-black-forever.py
var AdmZip = require('adm-zip');
var zip = new AdmZip("test.zip"); // Could also give a buffer here (if it's in memory)
var data = Buffer.from(JSON.stringify({"a": 3, "b": "hello"}));
zip.addFile("data.json", data); // New file created from contents in memory
zip.addLocalFile("trigger.json"); // Local file in file system
zip.writeZip("test.zip");
// test.zip (contents after program execution)
// - data.json
// - trigger.json
// - pdfReader.py
// - white-cuts-on-black-forever.py