Pet*_*ete 7 php amazon-s3 amazon-web-services
我已经重新编写了这个问题,以便更清楚,因为我已经更新了它.
我在使用Amazon AWS S3 PHP SDK时遇到问题.我只是想检查一个文件是否存在.使用这个PHP脚本:
<?php
require_once("../../../configs/config.".get_current_user().".php");
require INCLUDES_PATH . 'libraries/aws/aws-autoloader.php';
use Aws\S3\S3Client;
$client = S3Client::factory(array(
'key' => AWS_ACCESS_KEY_ID,
'secret' => AWS_SECRET_KEY
));
$key = 'profile/avatar/80745d03-c295-4205-bd82-58161f2fd2d1-320.jpg';
$result = $client->doesObjectExist( AWS_S3_BUCKET, $key );
var_dump(AWS_S3_BUCKET);
var_dump($key);
var_dump($result);
?>
Run Code Online (Sandbox Code Playgroud)
这是输出:
string(19) "stage.socialite.app"
string(59) "profile/avatar/80745d03-c295-4205-bd82-58161f2fd2d1-320.jpg"
bool(false)
Run Code Online (Sandbox Code Playgroud)
我知道该文件存在,它在这里:
这是用户的IAM策略,其密钥ID和密钥我正在使用:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::stage.socialite.app/*",
"arn:aws:s3:::stage.socialite.app"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我刚刚创建了一个新的Key/Secret对并将它们添加到我的配置中 - 我做错了什么?
如果var_dump()说bool(false)或bool(true),那么它正确返回一个布尔值.print_r()不包含详细的类型信息,并为值false和null值返回一个空字符串.
对象实际存在吗?要检查的事项:
doesObjectExist() 如果用户没有该对象的读取权限,则返回false.我在另一篇 SO 帖子中找到了答案,来自Carlos Castillo的评论:
他向我指出了一个Github 问题的方向,该问题建议在初始化 S3 客户端时设置区域,这是因为我使用爱尔兰的 S3 实例作为我的开发服务器,而不是默认的美国服务器。
所以这就是解决方案:
$client = S3Client::factory(array(
'key' => AWS_ACCESS_KEY_ID,
'secret' => AWS_SECRET_KEY,
'region' => AWS_S3_REGION
));
Run Code Online (Sandbox Code Playgroud)
我的配置文件中的常量集在哪里AWS_S3_REGION,例如密钥和秘密。
归功于neilscastle、Carlos 和 Stack Overflow 出色的 SEO
| 归档时间: |
|
| 查看次数: |
10261 次 |
| 最近记录: |