解压缩.zip,然后使用Node.js将内容存储在S3中

解压缩.zip,然后使用Node.js将内容存储在S3中,node.js,amazon-s3,amazon-ec2,Node.js,Amazon S3,Amazon Ec2,大多数关于NodeJS、S3和Zips的问题与我想做的相反。上传一个zip文件,并将文件解压缩到S3上 我有一个在Amazon EC2实例上运行的快速应用程序,Node.JS通过POST请求接受文件上传。其目的是上传一个装满图像的zip文件,提取它们,并将每个图像放在AmazonS3上 我正在使用express.js接受发布的文件,我一直在使用AdmZip读取上传的zip文件。使用AdmZip,我可以将zip文件解压缩到服务器磁盘,然后在临时目录中循环每个解压缩的图像,然后将其发送到Amazon

大多数关于NodeJS、S3和Zips的问题与我想做的相反。上传一个zip文件,并将文件解压缩到S3上

我有一个在Amazon EC2实例上运行的快速应用程序,Node.JS通过POST请求接受文件上传。其目的是上传一个装满图像的zip文件,提取它们,并将每个图像放在AmazonS3上

我正在使用express.js接受发布的文件,我一直在使用AdmZip读取上传的zip文件。使用AdmZip,我可以将zip文件解压缩到服务器磁盘,然后在临时目录中循环每个解压缩的图像,然后将其发送到AmazonS3,但这似乎效率很低。
我读过很多关于将文件从S3流式传输到节点并动态压缩的文章。我想我想知道的是,反过来这是否可行。

我认为您无法提取S3上的文件。您必须将zip保存在/temp中,提取并将各个文件上载到s3

试试这样的东西:

app.post('/upload', function (req, res, next) { 

  myZip = req.files.myZipfile

  var zip = new require('node-zip')(myZip, {base64: false, checkCRC32: true});

  knox = require('knox');
  s3 = knox.createClient({"key": "", "secret": "", "bucket": ""})


  // You might need to try something like async here to throttle the putFile command
    for (var i = zip.files.length - 1; i >= 0; i--) { 

        s3.putFile(zip.files[i], path.basename(zip.files[i]), function(err, res) {

        });
    };


});

我想如果我把你的问题通读一遍会有帮助的。看起来这就是你已经在做的。你有没有试着看一下文档,谢谢你的回复。似乎没有办法将zip内容“流”到S3。你的答案是打开zip,读取ram中的内容,这接近我想要的。(比提取到HDD并从HDD读取文件更快)因此感谢你的回答,你已经基本回答了我的问题!