Мне нужна помощь с фильтрацией результатов S3 с использованием AWS SDK для PHP v3 и JMESPath. Фильтрация по номеру не работает с PHP SDK, как показывают документация JMESPath и примеры в Интернете.
<?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
Но если я заменю Size> `0`
на StorageClass=='STANDARD'
, я получу 10 самых последних объектов, как и ожидалось.
Я безуспешно пытался использовать следующие выражения размера.
Size>0
// возвращает ошибку: неожиданный токен числа Size>'0'
// успешно: возвращает нет результаты Size>`0`
// успешно: не возвращает результатов Size!=`0`
// возвращает результаты, но не отфильтровывает объекты нулевого размера Size!=\"0\"
// возвращает результаты, но не отфильтровывают объекты нулевого размера
Обратите внимание, что запрос s2api работает просто отлично, поэтому, похоже, это связано с методом поиска PHP SDK.
--bucket my-bucket-name \
--prefix path/to/my/objects \
--query "reverse(Contents[?Size>\`0\`].{Key: Key, Date: LastModified, Size: Size}) | [-10:]"
Любая помощь приветствуется!