Carrierwave / Fog to S3失败,文件超过5mb

时间:2013-08-25 14:08:22

标签: ruby-on-rails file-upload amazon-s3 carrierwave fog

我有一个Rails 4应用程序,它使用Carrierwave和Fog将文件上传到Amazon S3。应用程序使用的服务器是Nginx和Thin。

我遇到的问题是上传超过5mb的文件时。

我尝试到处寻找一种方法让它工作,我尝试过CarrierwaveDirect但仍然无法让它工作。

这是我的Carrierwave配置:

config.fog_directory  = 'aws-bucket-name'
config.fog_public     = false
config.fog_attributes = { multipart_chunk_size: 5242880 }
config.max_file_size = 200.megabytes # CarrierwaveDirect option

以下是控制器操作:

def new
  @file = DownloadFile.new
end

def create
  @file = DownloadFile.new
  @file.file = params[:download_file][:file]

  if @file.save
    redirect_to downloads_path
  else
    render :new
  end
end

形式:

<%= form_for @file, multipart: true do |f| %> <!-- even tried with `multipart` wrapped in `html: {}` -->
  <%= f.label :file %>
  <%= f.file_field :file %>
  <%= f.button t(:upload) %>
<% end %>

我可以很好地上传小文件,但是当涉及超过5mb的文件时,表单只是重新显示。没有错误,日志中没有错误,没有。

1 个答案:

答案 0 :(得分:0)

使用Carrierwave Direct看起来您需要稍微不同地设置表单(因为它需要在S3上将URL设置为1,而不是在您自己的服务器上)。如果您正在处理大型文件,这可能是更好的选择,因为大文件会占用一个进程一段时间。为了完成这项工作,您似乎希望使用direct_upload_form_for辅助方法而不是普通form_for,例如:

<%= direct_upload_form_for @uploader do |f| %>
  <%= f.file_field :avatar %>
  <%= f.submit %>
<% end %>

有关详细信息,请参阅:https://github.com/dwilkie/carrierwave_direct#rails