我目前正在使用带有 Carrierwave gem 的 Rails 3.2 将文件上传到 Amazon S3。现在我需要能够处理大于 5GB 的用户提交的文件,同时仍然使用 Carrierwave gem。Carrierwave 或 Fog 是否有任何其他 gem 或分支可以处理 5GB+ 文件上传到 S3?
编辑:我不想重写完整的 Rails 上传解决方案,所以这样的链接无济于事:https ://gist.github.com/908875 。
我目前正在使用带有 Carrierwave gem 的 Rails 3.2 将文件上传到 Amazon S3。现在我需要能够处理大于 5GB 的用户提交的文件,同时仍然使用 Carrierwave gem。Carrierwave 或 Fog 是否有任何其他 gem 或分支可以处理 5GB+ 文件上传到 S3?
编辑:我不想重写完整的 Rails 上传解决方案,所以这样的链接无济于事:https ://gist.github.com/908875 。
我想出了如何做到这一点并让它现在工作。在适当的config/environment
文件中,添加以下内容以将 100MB 块的文件发送到 Amazon S3:
CarrierWave.configure do |config|
config.fog_attributes = { :multipart_chunk_size => 104857600 }
end
由于雾 gem 内置了多部分上传(感谢 Veraticus 指出),因此只需通过 Carrierwave 将适当的配置属性传递到雾中。发送到 S3 时,我经常收到Connection reset by peer (Errno::ECONNRESET)
错误,因此可能需要重试部分上传。
您想使用S3 的分段上传功能。有用的是,Fog 确实可以处理多部分 S3 上传,如您在此拉取请求中所见。
不幸的是,Carrierwave 似乎没有内置功能来正确使用它。因此,您需要修改 Carrierwave 或手动放入 Fog 以正确上传此文件。
在上传之前,您需要将文件分成小块。
看看以下内容:
http://www.ruby-forum.com/topic/1282369
http://joemiller.me/2011/02/18/client-support-for-amazon-s3-multipart-uploads-files-5gb/
无论哪种方式,您都需要拆分文件。