将图像上传到 s3 时出现 Cloudfront 错误 "No Such Key"

Cloudfront Error when uploading images to s3 "No Such Key"

我正在开发一个 iOS 应用程序,它允许用户更新和更改他们的头像,图像存储在 S3 中的子目录中,具体取决于他们的用户 ID。例如:“/1005/avatar_3dseuori.jpg”。

我已经设置云端来分发存储在我的 S3 存储桶中的这些图像,但是我收到以下响应:

<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>

即使图像存在于我的存储桶中。如果我等待 ~5 分钟,我就可以使用我的云端来源查看图像。这是正常的等待期吗?

CloudFront 充当您的 S3 源的前端缓存。

当您从 CloudFront 请求图像时,它会检查它的缓存,如果它不存在于缓存中(并且根据配置的 TTL 尚未过期),它才会从您的 S3 请求图像原始桶。

如果您在 S3 中存在图像之前从 CloudFront 请求图像,则 CloudFront 将缓存 NoSuchKey 结果。这是因为该对象在 S3 中实际上还不存在。

将文件上传到 S3 后,CloudFront 将继续使用缓存的 NoSuchKey 值进行响应,直到配置的生存时间到期。在您的情况下,这可能是“5 分钟”。在那段时间之后,它重新请求来自 S3 的图像,这次得到了肯定的结果。

为避免此问题,请确保阻止向 CloudFront 请求不存在的图像。