【问题标题】:AWS-SDK: Query parameter in listobjects of S3AWS-SDK:S3的listobjects中的查询参数
【发布时间】:2019-06-30 17:37:16
【问题描述】:

我想在特定日期之后获取对象。使用 AWS CLI,我可以使用以下命令列出对象:

aws s3api list-objects-v2 --bucket "bucket1" --prefix "file-" --query "(Contents[?LastModified>'2019-02-06T05:34:12.000Z'])[0]"

但我想从我的代码中做到这一点,所以请告诉我如何使用 NPM AWS-SDK 过滤对象。

注意:我可以使用 execspawn 来完成,但为此我必须使用 CLI 配置配置文件,这将在本地创建凭据文件,所以我不想这样做。

【问题讨论】:

    标签: node.js amazon-web-services amazon-s3 aws-lambda aws-sdk


    【解决方案1】:

    使用AWS SDK for node.js。调用listObjectsV2方法,然后在回调方法中使用jmespath.js过滤API调用的输出。这相当于 AWS CLI 通过 --query 参数执行的操作。

    类似这样的东西(未经测试)

    var params = {
      Bucket: "bucket1", 
      Prefix: "file-"
     };
     s3.listObjectsV2(params, function(err, data) {
       if (err) console.log(err, err.stack); // an error occurred
       else {
           query = "Contents[?LastModified>'2019-02-06T05:34:12.000Z']"
           var results = jmespath.search(data,query);
       }
     };
    

    【讨论】:

    • 我的 S3 中有很多文件,在这种情况下,我必须带上所有对象然后过滤掉?在 cli 中使用查询参数时,我只能带上过滤后的记录。
    • 是的,但这与 CLI 的工作方式相同。它从 API 检索结果集,然后过滤输出。这一切都发生在使用 JMESPath 的客户端。
    • 好的。我试图找出如何将 jmespath 与 listObjectsV2 一起使用,但没有得到它。你能告诉我一个在回调中使用它并得到过滤结果的例子吗?
    • 添加了一个简单的例子
    • 我认为它只搜索前 1000 条记录,并且在 2 月 6 日之后没有获取我的数据,但是当我使用 cli 命令时,我能够得到结果。我在 2 月 6 日之前有数千条记录。
    猜你喜欢
    • 1970-01-01
    • 2019-01-19
    • 2018-02-01
    • 2022-01-19
    • 2019-10-16
    • 1970-01-01
    • 2018-07-25
    • 2020-09-01
    • 2020-08-16
    相关资源
    最近更新 更多