我使用Node.js从aws s3使用来自(aws-sdk)模块的putObject获取签名的url。当我在本地运行我的服务器时,上传到S3没有问题。当我将代码部署到heroku并选择要上传的文件时,我在Chrome控制台中收到以下错误:
https://torhuw-hrns.s3.amazonaws.com/5f522890-0283-11e6-a696-b1fc6f56c785-T ... 4& Signature = P7ybw4%2B2qqNRNKTZcc%2FMWLhPn1o%3D& x-amz-acl = public-read-write无法加载资源:服务器响应状态为403(禁止)
我正在使用Node.js(aws-sdk)s3getSignedUrl方法来获取签名并将其发送到前端以将我的文件上传到我的s3存储桶。
答案 0 :(得分:1)
仔细检查您的S3存储桶权限和CORS配置。您需要确保该策略允许" s3:PutObject"在您的存储桶上,您需要确保CORSRule允许PUT / POST并允许您的应用程序域。
要调试这些内容,您可以考虑暂时放宽对“开放式”的所有权限。并在完全不受限制时检查它是否有效。
答案 1 :(得分:0)
好的,我通过创建一个更新CORS配置的新存储桶,创建新的access_key_ID和access_secret_access_key以及更新heroku环境变量来解决这个问题(我还选择了存储桶与我的heroku应用程序位于同一区域,但不确定是否这是解决方案)。使用的CORS配置是:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>