S3 listObjectsV2 - StartAfter 不显示预期结果
S3 listObjectsV2 - StartAfter does not show intended results
我正在尝试获取存储桶中特定标识符之后的所有文件。
这是我的代码,省略了不相关的部分。
require_once LIB . DS . 'Aws/vendor/autoload.php';
use Aws\S3\S3Client as S3Client;
use Aws\Credentials as Credentials;
$s3 = new S3Client([
'region' => $region,
'version' => 'latest',
'key' => AWS_KEY,
'secret' => AWS_SECRET,
'credentials' => $credentials
]
);
$data = $s3->listObjectsV2(
[
'Bucket' => <MY BUCKET>,
// the response content should be after this record
'StartAfter' => '302760677',
'MaxKeys' => 2
]);
print_r($data);
我得到的结果如下:
Aws\Result Object
(
[data:Aws\Result:private] => Array
(
[IsTruncated] => 1
[Contents] => Array
(
[0] => Array
(
[Key] => json/300705/300705046/status.json
[LastModified] => Aws\Api\DateTimeResult Object
(
[date] => 2018-06-20 11:45:06.000000
[timezone_type] => 2
[timezone] => Z
)
[ETag] => "2777f5fabc31969108b16cd8459d3b5d"
[Size] => 945
[StorageClass] => STANDARD
)
[1] => Array
(
[Key] => json/300705/300705046/address.json
[LastModified] => Aws\Api\DateTimeResult Object
(
[date] => 2018-06-20 11:45:06.000000
[timezone_type] => 2
[timezone] => Z
)
[ETag] => "3fd8ef54a83e93d470f5438079f51345"
[Size] => 477
[StorageClass] => STANDARD
)
)
)
)
这里,返回的响应内容显示了键- 300705046 的数据,该数据小于我在请求中的 "StartAfter" 节点中指定的数据。
任何人都可以帮助我了解我可能做错了什么。
谢谢
StartAfter (docs) 与完整密钥匹配。
例如,您可以尝试请求:
'StartAfter' => 'json/302760/302760677/address.json',
'StartAfter' 将 return 任何大于该值的键。在您的情况下,您将 'StartAfter' 设置为“302760677”,它小于密钥 'json/300705/300705046/status.json'。请尝试以下操作:
'StartAfter' => 'json/302760/302760677'
或
'StartAfter' => 'json/302760/302760677/'
甚至
'StartAfter' => 'json/302760/302760677/a'
您可能想改用 Prefix,这样您就不必预测文件夹中项目的确切数量。在这种情况下,您将使用:
'Prefix' => 'json/302760/302760677/'
如果您正在显式创建 s3 文件夹对象(例如 'json/302760/302760677/')并且不想在查询中取回该文件夹对象,您可以将其同时指定为 Prefix 和 StartAfter,它会只给你内容
我正在尝试获取存储桶中特定标识符之后的所有文件。
这是我的代码,省略了不相关的部分。
require_once LIB . DS . 'Aws/vendor/autoload.php';
use Aws\S3\S3Client as S3Client;
use Aws\Credentials as Credentials;
$s3 = new S3Client([
'region' => $region,
'version' => 'latest',
'key' => AWS_KEY,
'secret' => AWS_SECRET,
'credentials' => $credentials
]
);
$data = $s3->listObjectsV2(
[
'Bucket' => <MY BUCKET>,
// the response content should be after this record
'StartAfter' => '302760677',
'MaxKeys' => 2
]);
print_r($data);
我得到的结果如下:
Aws\Result Object
(
[data:Aws\Result:private] => Array
(
[IsTruncated] => 1
[Contents] => Array
(
[0] => Array
(
[Key] => json/300705/300705046/status.json
[LastModified] => Aws\Api\DateTimeResult Object
(
[date] => 2018-06-20 11:45:06.000000
[timezone_type] => 2
[timezone] => Z
)
[ETag] => "2777f5fabc31969108b16cd8459d3b5d"
[Size] => 945
[StorageClass] => STANDARD
)
[1] => Array
(
[Key] => json/300705/300705046/address.json
[LastModified] => Aws\Api\DateTimeResult Object
(
[date] => 2018-06-20 11:45:06.000000
[timezone_type] => 2
[timezone] => Z
)
[ETag] => "3fd8ef54a83e93d470f5438079f51345"
[Size] => 477
[StorageClass] => STANDARD
)
)
)
)
这里,返回的响应内容显示了键- 300705046 的数据,该数据小于我在请求中的 "StartAfter" 节点中指定的数据。
任何人都可以帮助我了解我可能做错了什么。
谢谢
StartAfter (docs) 与完整密钥匹配。
例如,您可以尝试请求:
'StartAfter' => 'json/302760/302760677/address.json',
'StartAfter' 将 return 任何大于该值的键。在您的情况下,您将 'StartAfter' 设置为“302760677”,它小于密钥 'json/300705/300705046/status.json'。请尝试以下操作:
'StartAfter' => 'json/302760/302760677'
或
'StartAfter' => 'json/302760/302760677/'
甚至
'StartAfter' => 'json/302760/302760677/a'
您可能想改用 Prefix,这样您就不必预测文件夹中项目的确切数量。在这种情况下,您将使用:
'Prefix' => 'json/302760/302760677/'
如果您正在显式创建 s3 文件夹对象(例如 'json/302760/302760677/')并且不想在查询中取回该文件夹对象,您可以将其同时指定为 Prefix 和 StartAfter,它会只给你内容