以zip格式从Node js下载amazon s3 bucket中的图像

时间:2015-03-11 06:41:18

标签: javascript node.js amazon-web-services amazon-s3 zip

我使用Node js和amazon s3服务来存储图像。我在bucket.each文件夹中有不同的文件夹有子文件夹。任何人都可以建议一种方式来下载原始大小的特定文件组合为zip文件。 如果我可以指定图像密钥或网址,将会有所帮助。

2 个答案:

答案 0 :(得分:1)

一种方法是通过指定密钥和存储桶信息,使用AWS-SDK包的getObject()方法获取所有图像。

您可以使用JSZip压缩图片。之后,您可以将zip保存到amazon s3并为用户提供URL或使用“fs”包保存到本地计算机。

我在这里放置我使用的示例代码

  s3 = new AWS.S3({
        endpoint: s3url
    }),
    zip = new JSZip();
 function() {
        var albumImages = [{"name":filename,"key":key}], // contains image key and filename
            content = null; 
               // using async eachLimit to get images parallely 

        async.eachLimit(albumImages, 10, function(albumImage, next) { 
            var params = {
                Bucket: imageBucket, // bucket name
                Key: albumImage.key
            };
            s3.getObject(params, function(err, data) {
                if (err) {
                    console.log('get image files err',err, err.stack); // an error occurred

                } else {
                    zip.file(albumImages.indexOf(albumImage) + albumImage.name, data.Body);
                    next();
                }
            });
        }, function(err) {
            if (err) {
                console.log('err', err);

            } else {
                content = zip.generate({
                    type: 'nodebuffer'
                });
                var params = {
                    Bucket: archiveBucket, // name of dest bucket
                    Key: 'images.zip',
                    Body: content
                };
                s3.putObject(params, function(err, data) {
                    if (err) {
                        console.log('upload zip to s3 err',err, err.stack); // an error occurred

                    } else {
                        console.log(data); // successful response

                    }
                });
            }
        });
    }

这里我将zip再次保存到另一个s3存储桶中。 你也可以使用aws lambda来做这个zip。

答案 1 :(得分:0)

s3不允许您压缩文件并下载,但它允许您在上传之前压缩文件,可以单独下载。

这意味着您的下载将始终是您上传的文件的全部或部分内容,而不是相反。

您始终可以使用listObjects命令下载多个文件,并使用前缀下载所需文件,然后在每个列出的对象上添加getObject