Javascript 有没有一种方法可以压缩整个s3目录,并将压缩文件留在那里而不下载它?

Javascript 有没有一种方法可以压缩整个s3目录,并将压缩文件留在那里而不下载它?,javascript,node.js,amazon-web-services,amazon-s3,aws-lambda,Javascript,Node.js,Amazon Web Services,Amazon S3,Aws Lambda,我是aws新手,我想在aws中压缩一个目录,并在lambda中获得压缩后的S3URL。目前我正在使用S3ZIP模块来实现这一点。但是它直接下载zip文件。我其实不想下载。我想把它自己拉在桶里。有办法吗?我在下面分享了我的代码 const params = { Bucket: S3BucketConfig.bucket, Prefix: folder } const filesArray = [] const files = s3.listObjects(

我是aws新手,我想在aws中压缩一个目录,并在lambda中获得压缩后的S3URL。目前我正在使用S3ZIP模块来实现这一点。但是它直接下载zip文件。我其实不想下载。我想把它自己拉在桶里。有办法吗?我在下面分享了我的代码

    const params = {
    Bucket: S3BucketConfig.bucket,
    Prefix: folder
  }
  
  const filesArray = []
  const files = s3.listObjects(params).createReadStream()

  const xml = new XmlStream(files)
  xml.collect('Key')
  xml.on('endElement: Key', function(item) {
    filesArray.push(item['$text'].substr(folder.length))
  })
  xml
    .on('end', function () {
      zip(filesArray)
    })
  
  function zip(files) {
    const output = fs.createWriteStream(join(__dirname, fileName))
    s3Zip
     .archive({ region: "eu-west-1", bucket: S3BucketConfig.bucket, preserveFolderStructure: true }, folder, files)
     .pipe(output)
  }
有人能帮我吗?提前谢谢

我想把它自己拉在桶里。有办法吗

可惜没有。S3不是文件系统,它是。这意味着您不能对bucket中的对象执行修改

zip操作需要下载所有要存档的对象,本地压缩它们(例如在ec2实例、lambda函数、本地工作站上),然后将zip上载到bucket

下载对象并将其打包到zip中。如果不先下载对象,这个模块或其他模块就无法在bucket中执行压缩操作。在压缩之前,对象不必物理存储在本地,因为它们可以从S3流式传输,但仍然不是“在”bucket中