Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用lambda中的节点js将我的文件添加到现有的zip文件夹?_Node.js_Lambda_Zip - Fatal编程技术网

Node.js 如何使用lambda中的节点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文件。然而,它实际上并不是“附加”。这是一个折衷方案,因为涉及到流媒

我有一个从s3 bucket下载的zip文件夹。现在我的代码中有一个json文件,我想使用节点js代码将json文件添加到现有的zip文件中

在node js中是否有任何预先存在的用于执行此操作的模块

我尝试过,但无法将该文件添加到现有的zip文件夹中

对此有什么想法吗?

下面是一个来自


因为上面的方法稍微长一点,所以唯一的其他选择是使用,在读取现有对象后创建一个新对象,添加文件,然后重新创建zip。然后,您可以选择删除原始zip文件。然而,它实际上并不是“附加”。这是一个折衷方案,因为涉及到流媒体。我找不到任何库可以内联执行此操作并修改已定稿的zip。下面是一个暴力方法,它经过以下步骤:

  • 创建临时目录
  • 解压缩到临时目录
  • 删除原始邮政编码
  • 使用Temp Dir构建归档和种子
  • 回调以附加任何其他文件
  • 定稿归档
  • 删除临时目录
  • 它用来打开拉链并把它捆起来

    您可以在此repo上看到完整的源代码

    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