将图像上传到 s3 存储桶后如何从 aws s3 存储桶访问文件。当我获取图像时,它显示访问被拒绝错误。
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>xxxxx</RequestId>
<HostId>xxxxx</HostId>
</Error>
Controller Code is
$sharedConfig = [
'region' => Config::get('filesystems.disks.s3.region'),
'version' => 'latest',
"Effect" => "Allow",
'credentials' => [
'key' => 'xxxx',
'secret' => 'xxxx'
]
];
$sdk = new \Aws\Sdk($sharedConfig);
$s3 = $sdk->createS3();
$res = $s3->putObject([
'Key' => $fileName, // This will overwrite any other files with same name
'SourceFile' => $filePath,
'Bucket' => 'bolttupload'
]);
Storage::copy($res['ObjectURL'],$destinationPath.$fileName);
echo $res['ObjectURL'];die;
最佳答案
默认情况下,Amazon S3 中的对象是私有(private)的。您可以通过多种方式授予对对象的访问权限:
- 单个对象的访问控制列表(“公开此对象”)
- 存储桶的存储桶策略(“公开此存储桶或目录”)
- 通过授予 IAM 用户的权限(“该用户可以访问此存储桶或目录)
- 通过预签名网址(“此链接将在接下来的 5 分钟内有效”)
您用于访问对象的 URL 不会将您标识为授权用户。您没有存储桶策略。您的对象不是公开的。因此,您正确地收到了拒绝访问消息。
要使其可访问,您必须根据上面的列表来决定访问范围。如果您希望对象完全公开,请在上传对象时设置该选项:
$result = $client->putObject([
'ACL' => 'private|public-read|public-read-write|authenticated-read|aws-exec-read|bucket-owner-read|bucket-owner-full-control',
...
如果您想要整个存储桶或目录公开,请使用Bucket Policy .
如果您只想某些用户访问该对象,请添加针对 IAM 用户或 IAM 组的策略,然后使用可识别该用户的凭证访问该对象。
如果您希望应用程序在运行时确定谁应该访问该对象,请使用 pre-signed URL .
关于php - 如何从aws s3存储桶访问文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45262486/