如何按上次修改顺序列出 Amazon s3 API 中的对象


how to listObjects in Amazon s3 API order by LastModified?

我需要列出来自 Amazon s3 的对象,以便最新上传的对象应该列在顶部?怎么做?

$result = $client->listObjects(array(
    // Bucket is required
    'Bucket' => 'string',
    'Delimiter' => 'string',
    'EncodingType' => 'string',
    'Marker' => 'string',
    'MaxKeys' => integer,
    'Prefix' => 'string',
));

没有选项可以对上面进行排序?

下面是我的代码,

   $items = $this->get('my.aws_s3.client')->listObjects(array(
        'Bucket' => "my_bucket"
    ));

    foreach ($items as $i) {
        var_dump($i);
    }

下面是我的输出,

string 'my_bucket' (length=19)
string '' (length=0)
string '' (length=0)
string '1000' (length=4)
boolean true
array (size=1000)
  0 => 
    array (size=6)
      'Key' => string '1286319624.tar.gz' (length=26)
      'LastModified' => string '2010-10-05T23:00:50.000Z' (length=24)
      'ETag' => string '"9118de4f6a8e1e21be99d791108eaa57"' (length=34)
      'Size' => string '90460751' (length=8)
      'Owner' => 
        array (size=2)
          'ID' => string '917a9ca91589caf57633aee246d4263777366b4d00aafa9ac3948910f6eb686f' (length=64)
          'DisplayName' => string 'dbrckll' (length=7)
      'StorageClass' => string 'STANDARD' (length=8)
  1 => 
    array (size=6)
      'Key' => string '1286406023.tar.gz' (length=26)
      'LastModified' => string '2010-10-06T23:00:50.000Z' (length=24)
      'ETag' => string '"e0e94040702eb9e18a906140fb706767"' (length=34)
      'Size' => string '90460758' (length=8)
      'Owner' => 
        array (size=2)
          'ID' => string '917a9ca91589caf57633aee246d4263777366b4d00aafa9ac3948910f6eb686f' (length=64)
          'DisplayName' => string 'dbrckll' (length=7)
      'StorageClass' => string 'STANDARD' (length=8)
  2 => 
如果您看到"上次修改时间

",如果您看到"上次修改时间" 首先显示"上次修改时间" =>字符串"2010-10-05T23:00:50.000Z",然后 "最后修改时间" => 字符串 '2010-10-06T23:00:50.000Z'

如何按上次修改时间的降序对其进行排序?

建议

使用 Spl 迭代器,因此不幸的是,这实际上取决于您的实现。这是我使用迭代器的实现:

    $iterator = $client->getListObjectsIterator([
        'Bucket' => 'string',
        'Prefix' => 'string',
        'MAX' => 1000,
    ]);
    $arrayIterator = new 'ArrayIterator($iterator->toArray());
    $arrayIterator->uasort(function($a, $b){
        $itemADate = (new DateTime($a['LastModified']));
        $itemBDate = (new DateTime($b['LastModified']));
        return $itemADate->diffInSeconds($itemBDate, false) > 0;
    });

*日期时间只是一个碳实现

因为这是一个较旧的 s3 变体,我现在使用它

$objects = $s3->getIterator('ListObjects', [
    'Bucket' => 'string',
    'Prefix' => 'string'
]);
$Iterator = new 'ArrayIterator($objects);
$Iterator->uasort(function($a, $b){
    $aDate = (new DateTime($a['LastModified']));
    $bDate = (new DateTime($b['LastModified']));
    return $aDate->diffInSeconds($bDate, false) > 0;
});