在aws-php-sdk ListObjects上放置一个“sort_by”

时间:2017-02-24 19:35:08

标签: amazon-s3 aws-php-sdk

在我目前的项目中,我需要每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

1 个答案:

答案 0 :(得分:1)

我不知道他们是否有一些事情可以在LastModified的基础上对对象进行排序,但您可以在LastModified列上查询和过滤对象。 您可以使用此功能过滤在特定时间aws s3api list-objects --bucket "bucket-name" --prefix "some-prefix" --query "Contents[?LastModified>=\`2017-03-08\`]"

之后修改的所有文件

对于shell来说,这可能与php有类似之处。