Php 如何从aws s3存储桶访问文件?
如何在将图像上传到s3 bucket后从aws s3 bucket访问文件。当我获取图像时,它显示访问被拒绝错误Php 如何从aws s3存储桶访问文件?,php,laravel-5,amazon-s3,amazon-ec2,Php,Laravel 5,Amazon S3,Amazon Ec2,如何在将图像上传到s3 bucket后从aws s3 bucket访问文件。当我获取图像时,它显示访问被拒绝错误 <Error> <Code>AccessDenied</Code> <Message>Access Denied</Message> <RequestId>xxxxx</RequestId> <HostId>xxxxx</HostId> </Error> Cont
<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;
默认情况下,AmazonS3中的对象是私有的。您可以通过以下几种方式授予对对象的访问权限:
- 对单个对象的访问控制列表(“将此对象公开”)
- 桶策略在桶上(“将此桶或目录公开”)
- 通过授予IAM用户的权限(此用户可以访问此存储桶或目录)
- 通过预签名URL(“此链接将在接下来的5分钟内有效”)
$result = $client->putObject([
'ACL' => 'private|public-read|public-read-write|authenticated-read|aws-exec-read|bucket-owner-read|bucket-owner-full-control',
...
如果您想要整个bucket或目录公共,请使用
如果只希望某些用户访问该对象,请针对IAM用户或IAM组添加策略,然后使用标识该用户的凭据访问该对象
如果您希望应用程序在运行时决定谁应该访问对象,请使用。可能有多种原因,但这似乎是一个权限问题。您可以检查假定访问bucket的角色的bucket权限吗?您如何访问对象?在web浏览器中?您使用的URL是什么默认情况下,亚马逊S3中的所有对象都是私有的,除非您对该对象、bucket或用户设置了权限。是什么让您认为该对象应该是可访问的?您是否分配了bucket策略?如果是,请告诉我们。@Ashan,我已授予bucket完全权限。@JohnRotenstein,我正在从web浏览器访问该对象,并且我使用了该url w这是我上传对象时aws s3 bucket返回的。我没有为该bucket分配任何bucket策略。@RajeevVarshney您找到了如何使用php从s3 bucket访问任何图像或文件的解决方案吗?