【问题标题】:S3 listObjects API returns wrong dataS3 listObjects API 返回错误数据
【发布时间】:2015-03-26 14:22:33
【问题描述】:

我在 S3 中有以下文件夹结构。

照片/id1/图库/pic1
照片/id2/图库/pic2
照片/id3/menu/pic3

我写了以下sn-p来列出每个id中的图片

var restids=['id1','id2','id3'];
for(var i=0;i<restids.length;i++)
    {
        (function(i){
            setTimeout(function(){
                var getparams ={Bucket:'photos' , Marker:restids[i]+'/'};
                (function(par){
                    setTimeout(function(){
                          s3.listObjects(par,function(err,data){
                          if(err){
                            console.log('err fetching images from s3 '+err);
                          }
                          else{
                            console.log(_.pluck(data.Contents,'Key'));
                          }
                        });
                    });
                })(getparams);
            });
        })(i);
    }

上述sn-p的预期结果是

['id1/gallery/pic1']
['id2/gallery/pic2']
['id3/menu/pic3']

但实际结果是

['id1/gallery/pic1']
['id1/gallery/pic1','id2/gallery/pic2']
['id1/gallery/pic1','id2/gallery/pic2','id3/menu/pic3']

每个返回值都包含之前调用的值。 我无法理解这种奇怪的行为。
是由于回调,还是 API 本身有问题,还是我的代码有问题?
如果有人能向我解释这一点,我将不胜感激。 提前致谢。

【问题讨论】:

    标签: javascript node.js amazon-s3 callback aws-sdk


    【解决方案1】:

    listObjects 中的参数错误。 API 调用应该是这样的
    var getparams ={Bucket:'photos' , Prefix:restids[i]+'/'}
    而不是
    var getparams ={Bucket:'photos' , Marker:restids[i]+'/'}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-23
      • 2016-02-07
      • 2017-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-19
      • 2021-12-08
      相关资源
      最近更新 更多