【问题标题】:Download images from amazon s3 bucket in Node js in zip format以 zip 格式从 Node js 中的 amazon s3 存储桶下载图像
【发布时间】:2015-03-11 06:41:17
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    一种方法是通过指定key和bucket信息,使用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 来执行此压缩。

    【讨论】:

    • 我创建了一些与您的代码非常相似的东西,但可以用作服务。作为另一个例子,它可能对 OP 有用; github.com/gammasoft/zipper
    【解决方案2】:

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

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

    您始终可以使用 listObjects 命令下载多个文件,其中 前缀 是您需要下载的文件,然后是每个列出的对象上的 getObject

    【讨论】:

      猜你喜欢
      • 2021-07-15
      • 2021-11-14
      • 2021-06-09
      • 1970-01-01
      • 1970-01-01
      • 2020-09-19
      • 1970-01-01
      • 2015-09-01
      • 2018-03-14
      相关资源
      最近更新 更多