AMAZON s3-我能够成功将图像上传到s3存储桶但无法查看它们

时间:2015-11-17 14:18:01

标签: php laravel amazon-web-services amazon-s3

当我输入网址链接时,我收到此消息

<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>5E3C0EC6695332F6</RequestId>
<HostId>
+oAnihC+lgFxkMu5L9aUURaU/9ufCSWD0e/h4rn+LQhAp6CJox1yNJH1ojaGVvktJ0xbD7vx10=
</HostId>
</Error>

这是我的存储桶政策的样子

{
    "Version": "2012-10-17",
    "Id": "Policy000000000",
    "Statement": [
        {
            "Sid": "Stmt--someNumbers--",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mybucketname/*"
        }
    ]
}

我还检查了所有经过身份验证的AWS&#39;

更新我的PHP代码

private function fillMedia($media, $user, $file, $key)
{
    if($media->category =='profile'){
        $source_file=$file->dirname .'/' . $file->basename;
    }else{
        $source_file = $file->getRealPath();
    }
    $s3 = AWS::createClient('s3');
    $result = $s3->putObject(array(
        'Bucket' => env('BUCKET_NAME'),
        'Key' => $user->id . '/'. $media->category .'/'. $key,
        'SourceFile' => $source_file,
        'Metadata' => array(
        'Owner' => $user->first_name .' ' . $user->last_name
        )
        ));
}

2 个答案:

答案 0 :(得分:0)

我确认我可以使用此存储分区策略进行访问:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::name-of-your-bucket/*"
        }
    ]
}

以下是我执行的步骤:

步骤1 - 创建S3存储桶。

步骤2 - 选择存储桶,然后选择属性

步骤3 - 点击“添加广告规则”并插入上面的代码段。请务必将 您的存储名称 更改为您的存储桶名称。

步骤4 - 将测试文件上传到存储桶并选择文件。

第5步 - 为上传的文件选择属性 - 会有一个类似于https://s3-us-west-1.amazonaws.com/的网址 您的存储桶名称 / 您的测试文件,name.jpg

步骤6 - 使用上面的URL打开测试文件。

当我删除我使用的存储分区策略时,我收到了与您相同的错误。

我希望这有帮助!

答案 1 :(得分:0)

它适用于我

$s3 = new S3("awsAccessKey", "awsSecretKey");
    $s3->putObjectFile(source, "bucket-name", destination, S3::ACL_PUBLIC_READ));