【问题标题】:How to return listObjectsV2 as json如何将 listObjectsV2 作为 json 返回
【发布时间】:2019-06-04 22:32:25
【问题描述】:

我正在尝试调用 AWS S3 存储桶并获取我的图像 URL 列表,但它没有检索到它。

我在后端使用 Express,在前端使用 React。当我手动输入 JSON 数组的静态数据时,它确实显示在服务器上。我正在使用 listObjectsV2 来获取列表

const express = require('express');
const app = express(); 
const aws = require('aws-sdk');

const s3 = new aws.S3({
    accessKeyId: "secretId",
    secretAccessKey: "secretKey",
    region : 'eu-west-2',
    Bucket: 'my-aws-bucket'
});

let params = {
    Bucket: "my-aws-bucket", 
    MaxKeys: 6
};

app.get('/api/images', (req, res) => {
    let images = [];


s3.listObjectsV2(params, function(err, data) {
    if (err) {
        console.log("Error", err);
    } else { 

        var href = this.request.httpRequest.endpoint.href;
        var bucketUrl = href + "my-aws-bucket" + '/';

        data.Contents.map(function(photo) { 
            var photoKey = photo.Key;
            var photoUrl = bucketUrl + encodeURIComponent(photoKey);
            images.push(photoUrl);
        }); 
    }
});  

res.json(images);

});

const port = 5001; 
app.listen(port, () => console.log(`Server is on port: ${port}`));

我希望我的 images 空数组声明为填充图像 URL,例如 [https://s3.eu-west-2.amazonaws.com/my-aws-bucket/images/image1.png,https://s3.eu-west-2.amazonaws.com/my-aws-bucket/images/image2.png]

但是数组中没有填充任何内容。如果我手动将内容添加到图像数组中,例如 let images = [1,2,3,4];然后当我转到http://localhost:5001/api/images 时,它确实显示了 [1,2,3,4],但上面的代码没有任何效果。

【问题讨论】:

  • 你得到的photo.Key 正确吗?您也可以使用简单的forEach 代替map 函数
  • 嘿@DragonBorn,是的,我是。这是 data.Contents 返回的内容: Contents: [ { Key: 'aws.png', LastModified: 2019-06-04T09:55:27.000Z, ETag: '"74d4c1e312c30cd029ee7d10620c9b66"', Size: 18156, StorageClass: 'STANDARD' },{键:'images/',LastModified:2019-06-04T09:55:11.000Z,ETag:'"d41d8cd98f00b204e9800998ecf8427e"',大小:0,StorageClass:'STANDARD'}];
  • 你能console.log你的图像数组在将项目推入它之后,在你的循环之外并检查它。
  • 嘿@DragonBorn,我解决了,我只需要简单地移动 res.json(images);就在结束之后 else{}

标签: node.js express amazon-s3


【解决方案1】:

最后我解决了,我只需要简单地移动 res.json(图片);就在关闭 else{} 之后,所以这是固定代码

s3.listObjectsV2(params, function(err, data) {
    if (err) {
        console.log("Error", err);
    } else { 
    var href = this.request.httpRequest.endpoint.href;
    var bucketUrl = href + "my-aws-bucket" + '/';

    data.Contents.map(function(photo) { 
        var photoKey = photo.Key;
        var photoUrl = bucketUrl + encodeURIComponent(photoKey);
        images.push(photoUrl);
    }); 
   }
   res.json(images);

});  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多