【问题标题】:Put an "sort_by" on aws-php-sdk ListObjects在 aws-php-sdk ListObjects 上放置一个“sort_by”
【发布时间】:2017-03-09 01:19:15
【问题描述】:

在我当前的项目中,我需要每 4 秒检查一次 S3 存储桶内容是否有新文件。

每次使用该服务时,该脚本将运行大约 3 个小时,并且到最后将有大约 2700 个文件的单个前缀。

这是我列出这些文件的功能:

public function listFiles($s3Prefix, $limit, $get_after = ''){
    $command = $this->s3Client->getCommand('ListObjects');
    $command['Bucket']  = $this->s3_bucket;
    $command['Prefix']  = $s3Prefix;
    $command['MaxKeys'] = $limit;
    $command['Marker']  = $s3Prefix.'/'.$get_after;

    //command['Query'] = 'sort_by(Contents,&LastModified)';

    $ret_s3 = $this->s3Client->execute($command);

    $ret['truncated'] = $ret_s3['IsTruncated'];
    $ret['files'] = $ret_s3['Contents'];

    return $ret;
}// listFiles

我需要的是获取文件,按 LastModified 字段排序,所以我不需要获取超过 2k 的文件。 有没有像

这样的额外参数
command['Query'] = 'sort_by(Contents,&LastModified)';

要添加php API吗?

--------- 已编辑 ------------

正如 Abhishek Meena 的回答所指出的,在 shell 中可以使用

aws s3api list-objects --bucket "bucket-name" --prefix "some-prefix" --query "Contents[?LastModified>=\`2017-03-08\`]"

我正在寻找的是如何在 PHP 中实现这一点。

PHP API:https://github.com/aws/aws-sdk-php

【问题讨论】:

    标签: amazon-s3 aws-php-sdk


    【解决方案1】:

    我不知道他们是否有一些东西可以根据LastModified 对对象进行排序,但是您可以在LastModified 列上查询和过滤对象。 这是您可以用来过滤在一定时间后修改的所有文件aws s3api list-objects --bucket "bucket-name" --prefix "some-prefix" --query "Contents[?LastModified>=\`2017-03-08\`]"

    这是给shell的,他们可能对php有类似的东西。

    【讨论】:

    • 是的,从我尝试过类似命令 ['Query'] = 'sort_by(Contents,&LastModified)' 的 shell 文档中。我正在寻找类似的东西。不过还是谢谢。
    • 因为所有这些都被转换为相同的 API 定义。您可以试试这个并检查command['Query'] = "Contents[?LastModified>=$date";,其中 $date 将包含您在aws-sdk-php 结果部分中提到的日期时间。 'LastModified' =>
    猜你喜欢
    • 2022-01-19
    • 2018-02-01
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    相关资源
    最近更新 更多