我正在尝试通过Laravel5.5/PHP7在亚马逊S3中将图像从一个文件夹复制到另一个文件夹
$s3 = Storage::disk('s3');
$s3->copy('old_path/image.jpg', 'new_path/image.jpg');
我得到了一个错误:
Aws \ S3 \ Exception \ S3Exception
Error executing "GetObjectAcl" on "https://mybucket.s3.us-east-2.amazonaws.com/old_path/image.jpg?acl"; AWS HTTP error: Client error: `GET https://mybucket.s3.us-east-2.amazonaws.com/old_path/image.jpg` resulted in a `403 Forbidden` response: <?xml version="1.0" encoding="UTF-8"?> <Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>xxx (truncated...) AccessDenied (client): Access Denied - <?xml version="1.0" encoding="UTF-8"?> <Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>xxx</RequestId><HostId>xxx</HostId></Error>
我已经注意到,查询acl
被自动附加到old_path/image.jpg
中,正如您可以在错误消息https://mybucket.s3.us-east-2.amazonaws.com/old_path/image.jpg?acl
中看到的那样,我怀疑这是导致错误的原因,因为可以通过https://mybucket.s3.us-east-2.amazonaws.com/old_path/image.jpg
访问该图像,但是在其末尾使用?acl
是不可访问的。
我不知道怎么解决这个问题。有什么想法吗?!
发布于 2018-07-21 05:49:05
通常情况下,当您的Bucket-ACL不正确时会出现这种情况。您的用户没有足够的权限获取object ACL。您必须生成正确的Bucket策略并将其插入到您的Bucket中。
您可以使用生成器来创建策略。如果你有一个,你可以扩展它们。
https://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-bucket-policy.html
有时,为已定义的用户设置正确的权限有点复杂,您必须尝试一下。
https://stackoverflow.com/questions/51450732
复制相似问题