如何使用 Rails 和 Active Storage 实现 AWS S3 分段上传?

Posted

技术标签:

【中文标题】如何使用 Rails 和 Active Storage 实现 AWS S3 分段上传?【英文标题】:How to implement AWS S3 Multipart Upload with Rails and Active Storage? 【发布时间】:2019-11-19 06:00:31 【问题描述】:

我正在使用带有 multiple:true 选项的 vanilla Rails Active Storage 文件上传。这些文件存储在 S3 上。设置运行良好。但是,我认为对于非常大的文件,实施分段上传以获得最佳速度和可靠性是有益的。

我在这里找到了 AWS S3 分段上传的描述:https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html

我还发现了一个 Ruby 特定页面:https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu-ruby-sdk.html

但是,我找不到任何关于如何使用 Rails 和 Active Storage 实现此功能的参考资料。

如果可能的话,我想就如何最好地实施分段上传而不需要删除 Active Storage 获得一些指导。

【问题讨论】:

【参考方案1】:

如果有人正在寻找这个问题的答案。从 Rails 6.1 开始,Active Storage 将支持分段上传。对于大文件,Active Storage 直接上传会自动切换到多部分。无需更改设置。

您可以自定义被视为大文件的阈值。默认值为 100MB,您可以通过在 amazon 设置下将其添加到 storage.yml 来更改默认值: 上传: multipart_threshold:

参考:https://github.com/rails/rails/blob/master/activestorage/CHANGELOG.md

【讨论】:

据我测试,分段上传(来自当前的 rails master 分支)不会直接上传到 s3。 activestorage.js 与 v6.0.0.rc1 的差异主控没有变化。我尚未测试正常(非直接)上传。 支持来自 6.1。根据负责这部分代码的 Rails 开发人员的说法。 有人能告诉我 rails 6.1 多部分上传代码在哪里吗?我相信它适用于常规上传,但不能直接上传。 @AncorCruz 我猜它仍然不在activestorage.js 中,对吧? github.com/rails/rails/commits/main/activestorage/app/assets/…

以上是关于如何使用 Rails 和 Active Storage 实现 AWS S3 分段上传?的主要内容,如果未能解决你的问题,请参考以下文章

使用 rails 和 active_paypal_adaptive_payment 执行预批准付款

如何使用 Rails 和 Active Storage 实现 AWS S3 分段上传?

Ruby on Rails - Active Storage - 如何只接受 pdf 和 doc?

如何在 Rails 2.3.8 中使用带有关联的 Active 脚手架列出活动记录?

如何在视图中显示支付网关响应消息 - Rails 4,Active Merchant

Ruby on Rails。如何在 :belongs to 关系中使用 Active Record .build 方法?