AWS S3 / Accelerated bucket仅针对连接速度慢的用户失败

时间:2019-07-16 16:30:02

标签: amazon-web-services amazon-s3

我们使用户能够将视频上传到我们的S3存储桶。它已适合“加速” 选项,并已从我们的JS中使用“分段上传”功能。但是,我们注意到了一些令人不安的事情:从互联网快速的国家/地区成功上传了数千份内容。

但是,几乎所有慢速连接用户(所有碰巧都是来自互联网并不以速度闻名的地方)都无法上传。一旦他们开始上传,他们就会在控制台上收到许多错误,并且上传会卡住并失败。

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://our-secret-bucket-xxxxxx.s3-accelerate.amazonaws.com/tyoeu/Abbey%…BAYmLRf4.YqtrWLwkD9uc5wGp0.rpyIV6xqDHxHqNaEsaxQTMAHs3g8DXdL3. (Reason: CORS request did not succeed).

此存储桶的CORS设置如下:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>HEAD</AllowedMethod>
    <MaxAgeSeconds>43200</MaxAgeSeconds>
    <ExposeHeader>ETag</ExposeHeader>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

我们通过要求上传失败的用户手动上传到Dropbox并与我们共享链接来帮助他们进行手动上传-但这又是另外一个证明-如果他们可以通过缓慢的连接上传到Dropbox,为什么可以?他们是否上传到AWS / S3?这已经在我们的灵魂中了很久了,我们无法理解到底出了什么问题。

当然,我们不是地球上唯一一家允许来自世界各地的人们上传大文件的公司。为什么连接速度慢的用户失败?

2 个答案:

答案 0 :(得分:0)

请尝试执行以下步骤

1。创建s3存储桶的非加速版本,然后尝试使用这些用户。如果可行,则创建一个程序进行复制。我不确定为什么会出现Cors。

2。使用Amazon S3 Transfer Acceleration Speed Comparison Tool

  1. 尝试双栈通过使用以下s3加速端点域名之一,在启用加速的存储桶之间传输数据:

bucketname.s3-accelerate.amazonaws.com –访问启用加速的存储桶。

bucketname.s3-accelerate.dualstack.amazonaws.com –通过IPv6访问启用了加速功能的存储桶。 Amazon S3双栈终端节点支持通过IPv6和IPv4向S3存储桶的请求。 Transfer Acceleration双栈终端节点仅使用虚拟的托管样式类型的终端名称。有关更多信息,请参阅入门通过IPv6发出请求和使用Amazon S3双栈终端节点。 您可以使用Amazon S3传输加速速度比较工具来比较Amazon S3区域中的加速和非加速上传速度。速度比较工具使用分段上传功能,可以在不使用传输加速的情况下将文件从浏览器传输到各个Amazon S3区域。

它是从本文复制而来的 https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html

http://s3-accelerate-speedtest.s3-accelerate.amazonaws.com/en/accelerate-speed-comparsion.html

答案 1 :(得分:0)

似乎这可能是请求超时问题,您是否尝试过更改attrs = key.split(".") getattr(attrs[1], getattr(parameters, attrs[0])).set(val) ?默认值为两分钟,但是您可以通过将其设置为零来完全删除超时。有关更多信息,请参见here

已编辑以修复断开的链接。