S3 存储桶的全局 CORS 策略怎么可能不应用于存储桶中的所有文件?

问题描述 投票:0回答:2

我有一个用于媒体文件存储的 S3 存储桶,最重要的是用于 mp4 视频。所有这一切都有一个网络前端。 (不涉及 CloudFront,而且由于额外费用,我不想注册 CloudFront。)当浏览器遇到 mp4 视频的原始 URL 时,默认行为是在单击时播放 mp4 文件(无论是就地还是在一个新选项卡,具体取决于

target
HTML 标记)。然后,您可以从本机浏览器播放器下载视频,但这需要多次点击,我们谈论的是播放列表中有时有 40 个视频,与仅下载视频相比,这将是一个巨大的生产力打击。

因此,可以理解的是,用户需要一个下载按钮,该按钮允许下载视频而不是播放视频。经过几个小时的研究,我偶然发现了 StreamSaver.js,它效果很好,我什至可以为下载的视频指定一个有意义的名称(包含运动员姓名、位置、球衣# 等),而不是 GUID,但有一个缺点:我遇到了 CORS 政策错误,例如

Access to fetch at 'https://sportsboardmedia.s3.amazonaws.com/uploads/video/{GUID}_{GUID}.mp4' from origin 'https://app.sportsboard.io' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

我的水桶从一开始就可供公众使用。经过一番研究后,我将我的存储桶切换到静态网站托管模式(根据此 SO 条目),并且我还应用了此 SO 条目建议的 CORS 策略

目前的情况是,某些视频文件现在可以下载,但其他文件(我们正在谈论同一个存储桶)仍然会抛出 CORS 错误。这怎么可能呢?据我所知,CORS 策略应该对整个存储桶是全局的,并且从 CORS 的角度来看,每个文件都应该是相等的。我从哪里开始解决这个问题?

我几天前应用了此 CORS 政策,我的存储桶包含大约 5TB 的视频。我认为这对亚马逊来说并不是什么大问题。这是一个运动员储物柜示例,其中一些视频抛出 CORS 错误:

https://app.sportsboard.io/playerlocker/media/event/6272C5BE-CE03-4344-BED1-29369306C831/5e267f70-f1de-11e7-b8d3- f23c91087063/视频/


我也打开了一个 AWS 论坛帖子,但我听到的也只是那里的蟋蟀声:

https://forums.aws.amazon.co/thread.jspa?messageID=991094#991094


现在我也打开了 AWS IQ 请求:

https://iq.aws.amazon.com/p/N3SFMRLKRH


我也录制了视频:

https://youtu.be/Dy38JRI5-oU

也许我也应该录制一个 TikTok 视频???

amazon-s3 video download cors
2个回答
1
投票
查看另一个 StackOverflow 线程的响应。它对可能发生的情况有一个很好的解释:

https://stackoverflow.com/a/55265139/1025364

建议的解决方法是在图像和视频 DOM 元素上使用

crossorigin="anonymous"


0
投票
我也有同样的问题。我按 api GET 请求顺序加载 21 个 AWS S3 视频。有时我会收到 2 个 CORS 错误,有时是 10 个,有时是 20 个。非常令人沮丧。我尝试了所有方法,包括清除缓存、仔细检查 CORS 策略等,但都不起作用。

对我有用的是在资源 url 之后添加一个随机参数。例如添加“?随机= 1”。

所有视频现在加载 200。我使用的是 Chrome。听起来通过添加随机参数可能会绕过一些不合理的、不可删除的缓存。我还是不知道是什么原因。

© www.soinside.com 2019 - 2024. All rights reserved.