使用 Rails,我已经按照Heroku 这篇文章允许将文件直接上传到 S3 存储桶。我实际上关注了这篇文章,因为我之前的实现不适用于分段上传(因此,大文件)。一旦我实现了这个方法,大文件上传就好了,除了非常大的文件。
我应该注意到我偏离了这篇文章,因为我使用的是aws
gem 的 v1,因为我们的 Rails 版本。
这就是我的设置方式:
S3_BUCKET = AWS::S3.new.buckets[ENV['S3_BUCKET_NAME']]
def set_s3_post_url
@s3_media_post_url = S3_BUCKET.presigned_post(key: "product_media/#{SecureRandom.uuid}-${filename}", success_action_status: '201', acl: 'public-read')
end
如前所述,这适用于大文件(~1GB),但是当我尝试上传一个文件时,比如 10GB,它会进入大部分上传状态,然后随机失败。有时 20 分钟后,有时 1 小时后。我认为可能签名的 URL 即将到期,所以我明确设置了一个长的到期时间expires: Time.now + 4.hours
,但这似乎不起作用。
如果有人有任何想法,我将非常感谢您的帮助!
更新
我尝试了@bbozo 的 using 答案maxChunkSize
,但不幸的是,这似乎没有做到。但是,当我在控制台中查看 XHR 请求时,失败的请求从 AWS 返回了以下 XML 响应:
<Error>
<Code>InternalError</Code>
<Message>We encountered an internal error. Please try again.</Message>
<RequestId>1231BD4A29EE5291</RequestId>
<HostId>f5muQPj2lT2Tmqi49ffqjT4ueLimYvrWUJL6WRW+F7vgm2rL1+FOD3pmsKOEYxFaSFXzLiEZjTg=</HostId>
</Error>