这是我得到的错误
在“https://s3.ap-south-1.amazonaws.com/infosecure.buck/uploads/5th.jpg”上执行“PutObject”时出错; AWS HTTP错误:客户端错误:PUT https://s3.ap-south-1.amazonaws.com/infosecure.buck/uploads/5th.jpg
导致了403 Forbidden
响应:AccessDeniedAccess Denied69DC61(截断...)存取遭拒(客户端):访问被拒绝 - AccessDeniedAccess Denied69DC6155E0F5042AHg2jvV2iLEsOHnmsvxM2meASpYr9Z3I6zPxEPedneHixIaPZpfESW1 / SCO0UwlVnTKBXwkatE0M =
<?php
use Aws\S3\Exception\S3Exception;
require 'app/start.php';
if(isset($_FILES['file']))
{
$file=$_FILES['file'];
$name= $file['name'];
$tmp_name = $file['tmp_name'];
$extension = explode('.',$name);
$extension=strtolower(end($extension));
$key = md5(uniqid());
$tmp_file_name= "{$key}.{$extension}";
$tmp_file_path = "files/{$tmp_file_name}";
move_uploaded_file($tmp_name,$tmp_file_path);
try{
$s3->putObject([
'Bucket' => $config['s3']['bucket'],
'Key' => "uploads/{$name}",
'Body' => fopen($tmp_file_path,'rb'),
'ACL' => 'public-read'
]);
unlink($tmp_file_path);}
catch(S3Exception $e)
{
echo $e->getmessage();
}
}
?>
这是我的存储桶政策
{ “版本”:“2012-10-17”, “声明”:[ { “效果”:“允许”, “校长”:{ “AWS”:“arn:aws:iam :: 601825519382:user / admin-infosecure” }, “行动”:“s3:*”, “资源”:“arn:aws:s3 ::: infosecure.buck” } ] }
答案 0 :(得分:1)
似乎是一个许可问题。
如果您通过本地计算机访问,请确保您的IAM用户具有对该存储区的写入权限。
如果您在EC2实例上运行此代码,请确保Instance Role具有对此存储桶的写访问权。
答案 1 :(得分:0)
对于PutObject / GetObject,ARN需要引用存储桶中的对象,因此,代替:
{
"Version": "2012-10-17"
, "Statement": [ {
"Effect": "Allow"
, "Principal": { "AWS": "arn:aws:iam::601825519382:user/admin-infosecure" }
, "Action": "s3:*"
, "Resource": "arn:aws:s3:::infosecure.buck"
} ]
}
你想要
{
"Version": "2012-10-17"
, "Statement": [ {
"Effect": "Allow"
, "Principal": { "AWS": "arn:aws:iam::601825519382:user/admin-infosecure" }
, "Action": "s3:*"
, "Resource": [
"arn:aws:s3:::infosecure.buck"
, "arn:aws:s3:::infosecure.buck/*"
]
} ]
}