Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从aws s3存储桶访问文件?_Php_Laravel 5_Amazon S3_Amazon Ec2 - Fatal编程技术网

Php 如何从aws s3存储桶访问文件?

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

如何在将图像上传到s3 bucket后从aws s3 bucket访问文件。当我获取图像时,它显示访问被拒绝错误

<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分钟内有效”)
您用于访问对象的URL未将您标识为授权用户。您没有Bucket策略。您的对象不是公共对象。因此,您正确地收到了拒绝访问的消息

要使其可访问,您必须根据上述列表确定访问范围。如果您希望对象完全公开,请在上载对象时在该对象上设置该选项:

$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访问任何图像或文件的解决方案吗?