如何将大于5GB的文件上传到Amazon S3?

时间:2012-08-02 16:22:28

标签: ruby-on-rails ruby ruby-on-rails-3

我目前正在使用带有Carrierwave gem的Rails 3.2将文件上传到Amazon S3。现在我需要能够处理大于5GB的用户提交的文件,同时仍然使用Carrierwave gem。 Carrierwave或Fog有没有其他可以处理上传到S3的5GB +文件的宝石或分支?

编辑:我不想重写完整的Rails上传解决方案,因此这样的链接无济于事:https://gist.github.com/908875

3 个答案:

答案 0 :(得分:6)

您想使用S3's multipart upload functionality。有帮助的是,Fog确实可以处理多部分S3上传,你可以看到in this pull request

不幸的是,Carrierwave似乎没有内置的功能来正确使用它。因此,您需要手动修改Carrierwave或进入Fog以正确上传此文件。

答案 1 :(得分:6)

我想出了如何做到这一点并让它现在正常运作。在正确的config/environment文件中,添加以下内容以将100MB块中的文件发送到Amazon S3:

CarrierWave.configure do |config|
  config.fog_attributes = { :multipart_chunk_size => 104857600 }
end

由于雾宝石内置了多部分上传(感谢Veraticus将其指出),因此需要通过Carrierwave将相应的配置属性传递到雾中。发送到S3时,我经常收到Connection reset by peer (Errno::ECONNRESET)个错误,因此可能需要重试部分上传。

答案 2 :(得分:-2)

在上传之前,您需要将文件分成小块。

请看一下以下内容:

http://www.ruby-forum.com/topic/1282369

http://joemiller.me/2011/02/18/client-support-for-amazon-s3-multipart-uploads-files-5gb/

无论哪种方式,您都需要拆分文件。