5

在我当前的项目中,我需要每 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 回答所指出的那样,在外壳中可以使用

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

4

1 回答 1

1

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

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

于 2017-03-08T15:55:38.467 回答