2017-02-24 48 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'=> ** –