我已经测试了我的功能,将图像上传到我的机器上的s3,但是当我在ec2上进行制作时,由于一个奇怪的原因,它不起作用。
这是错误:
CredentialsException in InstanceProfileProvider.php line 79:Error retrieving credentials from the instance profile metadata server. (Client error: 404)
这是代码:
$destinationPath = 'images/institutions/logos';
$extension = $data['int_logo']->getClientOriginalExtension();
$keyname = $destinationPath.'/'.$username.'.'.$extension;
$bucket = "*****";
$filepath = $data['int_logo'];
$s3 = new S3Client([
'region' => 'us-west-2',
'version' => '2006-03-01',
'scheme' => 'http'
]);
$result = $s3->putObject(array(
'Bucket' => $bucket,
'Key' => $keyname,
'SourceFile' => $filepath,
'ACL' => 'public-read'
));
return $result['ObjectURL'];
}
这是我的s3政策:
{
"Version": "2012-10-17",
"Id": "*******",
"Statement": [
{
"Sid": "******",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:PutObjectAcl",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::****/*"
}
]}
我不知道为什么它会丢失凭据,我没有使用任何身份验证,每个人都可以在这个存储桶上放置一个文件。它在我的机器上100%工作。
答案 0 :(得分:1)
建立匿名连接的解决方案:
变化:
$s3 = new S3Client([
'region' => 'us-west-2',
'version' => '2006-03-01',
'scheme' => 'http',
]);
要:
$s3 = new S3Client([
'region' => 'us-west-2',
'version' => '2006-03-01',
'scheme' => 'http',
'credentials' => false
]);
我仍然不知道为什么我的本地计算机可以建立连接,但ec2服务器无法在没有此行的情况下执行此操作。
答案 1 :(得分:0)
我过去遇到过同样的问题。我最终必须输入以下代码,这对我有用:
$s3->path_style = true;