使用AWS SDK for PHP 3.x:按最后修改时间获取S3存储桶中最新的对象。
P粉262113569
P粉262113569 2023-07-28 11:50:32
0
1
423

我正在尝试使用AWS SDK for PHP 3.x按最后修改时间获取存储桶中最新的对象。

我已经看到了如何使用AWS CLI来实现此功能。在这里:

  • 按最后修改时间获取S3存储桶中最新的对象
  • 使用AWS CLI从S3获取最后修改的对象

但是我不知道如何使用PHP SDK来实现这个功能。

$S3Client = new AwsS3S3Client([ 'version' => 'latest', 'region' => 'eu-west-3', 'credentials' => [ 'key' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx', 'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx', ] ]); $startTime = strtotime('-5 minutes'); $res = $S3Client->ListObjectsV2([ 'Bucket' => 'my-bucket', 'Prefix' => 'objects/', 'StartAfter' => $startTime ]) 

我正在使用推荐的ListObjectsV2方法。

我有三个问题。


  1. 我应该如何按LastModified对结果进行排序?(就像在CLI中可以做的那样)

  2. 我有一些生命周期策略,这会影响到我的搜索,因为我得到了一些移动到GLACIER存储的对象的结果,而我不想要这些结果。

  3. 我想要获取对象的标签和元数据。我应该如何获取它?是否使用x-amz-optional-object-attributes?如何使用?

顺便说一下,使用StartAfter参数似乎没有改变任何东西。

P粉262113569
P粉262113569

全部回复 (1)
P粉068486220

  • 您需要在代码中实现该排序逻辑,S3Client / AWS不会默认支持此功能。这也意味着您需要列出所有对象(而不仅仅是前1000个),然后才能对它们进行排序,找出最新的对象。
  • 结果中包含了StorageClass属性,您可以/需要在进行排序或进一步处理结果之前对其进行过滤。
  • 仅通过列出操作是不可能实现的。您需要为您感兴趣的每个对象提交单独的GetObject请求。如果您想要同时获取成千上万个对象的元数据,您需要重新考虑您的方法,并且可能需要将此类数据存储在一个适当的可查询/可搜索的数据库中。
    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责声明 Sitemap
    PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!