繁体   English   中英

以zip格式从Node js的Amazon S3存储桶下载图像

[英]Download images from amazon s3 bucket in Node js in zip format

我正在使用Node js和Amazon s3服务来存储图像。 我在bucket中有不同的文件夹。每个文件夹都有子文件夹。 任何人都可以建议一种方法来下载原始大小的特定文件,并将它们组合为zip文件。 如果我可以指定图像键或URL,并且将被下载,将很有帮助。

一种方法是通过指定密钥和存储桶信息,使用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进行压缩。

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

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

您始终可以使用带有要下载文件前缀listObjects命令下载多个文件,然后在每个列出的对象上都紧跟getObject

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM