【发布时间】:2018-08-08 00:55:50
【问题描述】:
我正在使用 AWS s3 使用 PHP 列出对象键。
我已经加载了一个测试文件的存储桶设置:
Screenshot of my s3 bucket with one test file
这是我在 AWS 文档中使用的参考:
AWS ListingObjectKeysUsingPHP webpage
这是我在页面中使用的代码:
<?php
require 'vendor/autoload.php';
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
$bucket = 'apollos-integrations-public';
// Instantiate the client.
$s3 = new S3Client([
'version' => 'latest',
'region' => 'us-east-1'
]);
// Use the high-level iterators (returns ALL of your objects).
try {
$objects = $s3->getPaginator('ListObjects', [
'Bucket' => $bucket
]);
//var_dump($objects);
echo "Keys retrieved!" . PHP_EOL;
foreach ($objects as $object) {
echo $object['Key'] . PHP_EOL;
}
} catch (S3Exception $e) {
echo $e->getMessage() . PHP_EOL;
}
// Use the plain API (returns ONLY up to 1000 of your objects).
try {
$result = $s3->listObjects([
'Bucket' => $bucket
]);
echo "Keys retrieved!" . PHP_EOL;
foreach ($result['Contents'] as $object) {
echo $object['Key'] . PHP_EOL;
}
} catch (S3Exception $e) {
echo $e->getMessage() . PHP_EOL;
}
?>
当我执行这个 PHP 脚本时,它只返回:“Keys retrieved!”没有列出测试文件。它应该列出文件夹中的文件。
当我添加一个“var_dump($objects);” (在脚本中注释了,所以当我取消注释时),然后它会为对象返回大量数据,如下图所示:
由于某种原因,亚马逊提供的这部分代码不起作用:
foreach ($objects as $object) {
echo $object['Key'] . PHP_EOL;
}
为什么 AWS 提供的这段代码不起作用?
不应该需要密钥和秘密吗?
请帮忙
【问题讨论】:
-
您应该将
var_dump结果粘贴为文本而不是图片 - 您会注意到此对象内没有Key元素。如果您尝试访问http://apollos-integrations-public.s3.amazonaws.com/,您将获得一个 XML 文档,其中列出了文件及其密钥。
标签: php amazon-web-services amazon-s3