2017-02-24 51 views
5

在我当前的项目中,我需要每4秒检查一次我的S3存储桶内容是否有新文件。在aws-php-sdk上放置一个“sort_by”ListObjects

每次使用该服务时,该脚本将运行约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 

我所需要的是通过上次更改场拿到文件,命令,所以我并不需要在2K的文件来获取。 是否有像

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

要添加在PHP API中的额外参数?

---------- ------------ EDITED

正如指出的阿布舍克米娜答案,外壳有可能使用

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

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

这是为他们可能有类似的PHP的shell。

+0

是的,从shell的文档中,我尝试了类似command ['Query'] ='sort_by(Contents,&LastModified)'。类似的东西是我正在寻找的东西。谢谢您的好意。 –

+0

因为所有这些都被转换为相同的API定义。您可以试试这个命令并检查命令['Query'] =“Contents [?LastModified> = $ date”;'$ date将包含您在[aws-sdk-php]中提到的日期时间(http:// docs .aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#listobjects)结果部分。 **'LastModified'=> ** –