![](/img/trans.png)
[英]Retrieve list of only root objects (folders) in S3 - aws sdk v3 php
[英]How can I filter S3 objects by size using AWS SDK for PHP v3 Aws/ResultPaginator->Search and JMESPath expression?
我需要一些幫助來使用適用於 PHP v3 和 JMESPath 的 AWS 開發工具包過濾 S3 結果。 正如 JMESPath 文檔和在線示例所建議的那樣,按數字過濾不適用於 PHP SDK。
<?php
// test.php
use Aws\S3\S3Client;
// Create S3 client
$s3 = new S3Client([
'version' => 'latest',
'region' => 'us-east-1'
]);
$bucket = 'my-bucket-name';
$prefix = 'path/to/my/objects';
// Call list-objects-v2
$awspaginator = $s3->getPaginator('ListObjectsV2', [
'Bucket' => $bucket,
'Prefix' => $prefix
]);
// Apply filter to paginator
$jmes = "reverse(Contents[?Size>`0`].{Key: Key, Date: LastModified, Size: Size}) | [-10:]";
$results = $awspaginator->search($jmes);
// Echo results
$i = 0;
foreach ($results as $result) {
echo "\nResult: " . print_r($result);
$i++;
}
echo "\nCount: " . $i . PHP_EOL;
?>
這輸出計數:0
但是如果我用StorageClass=='STANDARD'
替換Size> `0`
,我會按預期得到 10 個最近的對象。
我嘗試了以下 Size 表達式,但沒有任何運氣。
Size>0
// 返回錯誤:意外的數字標記Size>'0'
// 成功:不返回結果Size>`0`
// 成功:不返回結果Size!=`0`
// 返回結果但不過濾掉零大小的對象Size!=\\"0\\"
// 返回結果但不過濾掉零大小的對象請注意, s2api 查詢工作正常,因此這似乎與 PHP SDK Search 方法有關。
--bucket my-bucket-name \
--prefix path/to/my/objects \
--query "reverse(Contents[?Size>\`0\`].{Key: Key, Date: LastModified, Size: Size}) | [-10:]"
任何幫助表示贊賞!
我正在努力在任何地方找到這個文檔,但似乎Size
被解組為一個字符串。 我能夠使您的示例與[?to_number(Size)>`0`]
或[?Size!='0']
。
正如文檔所述,這似乎是一個錯誤,或者至少是文檔中的一個錯誤:
AWS CLI 支持 JMESPath。 您為 CLI 輸出編寫的表達式與為 AWS SDK for PHP 編寫的表達式 100% 兼容。
https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_jmespath.html
我唯一能找到的甚至暗指這種行為的東西只是微不足道的:
https://forums.aws.amazon.com/message.jspa?messageID=752541#jive-message-312324
這里的問題是 DynamoDB API 期望以字符串形式接收數字,亞馬遜代表指出這種行為是 a) 因為 SDK 必須支持無法處理超過 20 億的整數的 32 位環境,以及 b)一般而言,所有 AWS 開發工具包都是從一組與語言無關的數據文件中自動生成的,他們傾向於在可以避免的情況下避免出現異常。 這似乎意味着將字符串用作整數可能會在整個 SDK 中廣泛出現。 也就是說,我在其他地方找不到任何提及。
無論是否有意,似乎是因為 PHP SDK 的 Api/Parser/XmlParser 沒有Size
聲明為的long
類型的映射。 它回退到此處將其解析為字符串的默認行為:
https://github.com/aws/aws-sdk-php/blob/master/src/Api/Parser/XmlParser.php#L23-L31
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.