Vin*_*ent 4 amazon-s3 amazon-web-services aws-sdk
不久前,我实现了一个 PDF 上传功能,其中我的前端调用我的后端,它调用getSignedUrl()Amazon 的 JavaScript SDK 来获取前端应该能够使用PUT请求上传文件的 URL 。
这已经工作了一段时间了,今天,我尝试实现类似的功能来上传图像(到不同的 S3 存储桶)。不幸的是,虽然它看起来设置相同,但PUT上传结果
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId><!-- A request ID --></RequestId>
<HostId><!-- A host ID --></HostId>
</Error>
Run Code Online (Sandbox Code Playgroud)
这并不是很有帮助,所以现在我正在尝试找出最好的调试方法。
我检查过的:
s3::GetObject在的资源是指这个新的桶PUT请求发送相同的 HTTP 标头OPTIONS首先发送的请求也是如此我还能检查什么?
所以有一件事我没有正确检查:
预签名 URL 允许您访问 URL 中标识的对象,前提是预签名 URL 的创建者有权访问该对象。也就是说,如果您收到用于上传对象的预签名 URL,则只有在预签名 URL 的创建者具有上传该对象所需的权限时,您才能上传该对象。
我从 AWS Lambda 函数生成了 URL,我必须为其添加 IAM 策略,如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::<bucket name>/*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2102 次 |
| 最近记录: |