如何使用imgURL一次从Amazon S3检索多个图像?

sim*_*ser 6 image amazon-s3 angularjs aws-sdk-js

我想基于图像URL从Amazon S3一次性检索图像列表.

目前我可以使用以下代码获取单个图像: -

     AWS.config.update({
                    accessKeyId: accessKeyId,
                    secretAccessKey: secretAccessKey
                });

                AWS.config.region = region;

                var bucketInstance = new AWS.S3();
                var params = {
                    Bucket: bucketName,
                    Key: awsImgUrl
                }
                bucketInstance.getObject(params, function (err, file) {
                    if (file) {
                        var dataSrc = "data:" + file.ContentType + ";base64," + EncodeData(file.Body);
                        callbackSuccess(dataSrc);
                    } else {
                        callbackSuccess("Error");
                    }
                });

EncodeData = function (data) {
        var str = data.reduce(function (a, b) { return a + String.fromCharCode(b) }, '');
        return btoa(str).replace(/.{76}(?=.)/g, '$&\n');
    }
Run Code Online (Sandbox Code Playgroud)

在我的场景中,我有多个S3图像URL,如awsImgUrl1,awsImgUrl2..awsImgUrln.

如何一次性获取它而不是一个接一个?

小智 1

您可以更改上传图像数据的方式。不要上传单个图像,而是上传包含多个图像数据的一个文档。

const addImageBlock = () => {
  var photoBlock = [
    {
      imageId: 'id',
      type: 'png',
      body: 'data:image/png;base64,iVBORw0K...'
    },
    {
      imageId: 'id2',
      type: 'png',
      body: 'data:image/png;base64,iVBORw0K...'
    },
    {
      imageId: 'id3',
      type: 'png',
      body: 'data:image/png;base64,iVBORw0K...'
    },
    {
      imageId: 'id4',
      type: 'png',
      body: 'data:image/png;base64,iVBORw0K...'
    }
    //...ect
    ];
  s3.upload({
    Key: photoBlockId + '.json',
    Body: photoBlock,
    ACL: 'public-read'
  }, function(err, data) {
    if (err) {
      return alert('There was an error', err.message);
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

然后,当您通过一个 s3 调用收到此数据时,您可以循环遍历并在前端渲染图像,

getObject(params, function (err, file) {
   imageArr = [];
    if (file) {
       JSON.parse(file.toString()).map((image) => {
      var image = new Image();
      image.src = image.body;
      imageArr.push(image)
    })
       callbackSuccess(imageArr);
                    } 
    else {
      callbackSuccess("Error");
         }
});
Run Code Online (Sandbox Code Playgroud)