php 按上次更新日期对S3存储桶排序

64jmpszr  于 2023-11-16  发布在  PHP
关注(0)|答案(2)|浏览(119)

根据https://stackoverflow.com/a/65675842/569976,您可以使用AWS S3 CLI客户端按最后修改日期对list-objects-v2的结果进行排序,如下所示:

aws s3api list-objects --bucket bucketname --query 'sort_by(Contents, &LastModified)[-1].Key' --output text

字符串
我的问题是.如何使用PHP客户端/Aws\S3\S3Client::listObjects实现这一点?
https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#listobjects提到了一堆你可以传递给它的选项,没有一个是“query”:

$result = $client->listObjects([
    'Bucket' => '<string>', // REQUIRED
    'Delimiter' => '<string>',
    'EncodingType' => 'url',
    'ExpectedBucketOwner' => '<string>',
    'Marker' => '<string>',
    'MaxKeys' => <integer>,
    'OptionalObjectAttributes' => ['<string>', ...],
    'Prefix' => '<string>',
    'RequestPayer' => 'requester',
]);


是不是PHP API客户端就不可能呢?

fbcarpbf

fbcarpbf1#

--query是AWS CLI支持的客户端参数。它不属于API。
您需要在PHP代码中对结果进行排序。
此参数使用JMESPath作为修改输出结果的脚本语言。如果您想完全模拟其行为,可以使用JMESPath库,如this

0aydgbwb

0aydgbwb2#

正如其他人所说,query不是API参数的一部分;相反,您可以使用JMESPath,它使您能够以声明方式指定如何从JSON文档中提取元素。AWS SDK for PHP已经依赖于jmespath.php
Aws\ResultInterface接口有一个search($expression)方法,该方法基于JMESPath表达式从结果模型中提取数据。

$expr = '<your_jmespath_expression>';
$data = $result->search($expr);

字符串

相关问题