我在 S3 存储桶上遇到了一个奇怪的问题,我使用 S3 存储桶来存储应用程序的图像,并使用 lambda 来处理 API 函数,因此上传可以在本地正常工作并且还使用 lambda,问题是当我想要在应用程序上显示图像,在本地主机上效果很好,但在服务器上图像根本不显示:
这是本地的:https://www.screencast.com/t/GA9R2ik3vX
但在服务器上看起来像这样:https://www.screencast.com/t/oSY2AuE5NF
我认为这可能是您的 S3 存储桶访问策略设置存在问题。可能是在设置存储桶时,AWS 获取了您的本地 IP 并将其添加到允许的 IP 列表中(我很确定 AWS 有时会自动执行此操作),这就是为什么它可以在您的本地主机上运行,但不能在您的服务器上运行。
并且您的存储桶策略是公开的:
它应该看起来像这样:
{
"Version": "2012-10-17",
"Id": "Policy123",
"Statement": [
{
"Sid": "Stmt123",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bucket-name/*"
}
]
}
请注意,这将使您存储桶中的图像公开,任何拥有链接的人都可以访问它。
更新修复
问题仍然存在,但我找到了一种不同的方式来上传图像,我是从前端而不是使用签名 url 的 lambda 来完成的,希望它对将来的人有所帮助。