一个S3存储桶的全局CORS策略如何可能不适用于存储桶中的所有文件?

11 浏览
0 Comments

一个S3存储桶的全局CORS策略如何可能不适用于存储桶中的所有文件?

我有一个用于媒体文件存储的S3存储桶,最重要的是用于mp4视频。还有一个网页前端用于访问这些文件。(没有涉及CloudFront,也不想注册它,因为会增加额外费用。)当浏览器遇到mp4视频的原始URL时,默认行为是在单击时播放mp4文件(根据HTML标签target,可以在原地播放或在新标签页中播放)。然后您可以从原生浏览器播放器中下载视频,但这需要很多点击操作,而且如果视频只是下载而不是播放,这将严重影响效率,因为有时会有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.

我的存储桶从一开始就对公众可访问。经过一些研究,我将存储桶切换到了静态网站托管模式(参考此Stack Overflow帖子),并且我还应用了一条CORS策略(参考此Stack Overflow帖子)。

当前的情况是某些视频文件现在可以下载,但其他文件(同一存储桶)仍然出现CORS错误。这怎么可能呢?据我所知,CORS策略应该作用于整个存储桶,从CORS角度来看,每个文件应该是平等的。我应该从哪里开始修复这个问题呢?

我几天前应用了这个CORS策略,我的存储桶中包含大约5TB的视频。我认为对于亚马逊来说这并不是什么大问题。以下是一个示例运动员储物柜,其中一些视频会出现CORS错误:https://app.sportsboard.io/playerlocker/media/event/6272C5BE-CE03-4344-BED1-29369306C831/5e267f70-f1de-11e7-b8d3-f23c91087063/videos/


我也在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视频?

0
0 Comments

S3存储桶的全局CORS策略不适用于存储桶中的所有文件,可能的原因是存储桶中的某些文件没有正确配置CORS策略。解决方法是在图像和视频DOM元素中使用crossorigin="anonymous"属性。这个解决方法可以确保请求发送时不会包含任何身份验证信息,从而避免了CORS问题。

在StackOverflow的一个帖子中,有人提供了一个可能发生的情况的解释。原帖链接:https://stackoverflow.com/a/55265139/1025364。根据这个解释,当S3存储桶的CORS策略未正确应用到所有文件时,可能是某些文件的CORS配置有问题。

为了解决这个问题,可以使用crossorigin="anonymous"属性来处理图像和视频DOM元素。这个属性可以确保在请求发送时不包含任何身份验证信息,从而解决CORS问题。

下周我会进行进一步的验证和测试。

0