0

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

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

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

这是我的载波配置:

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 的文件时,表格只会重新显示。没有错误,日志中没有错误,什么都没有。

4

1 回答 1

0

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

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

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

于 2013-08-26T13:14:19.480 回答