我有一个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的文件时,表单只是重新显示。没有错误,日志中没有错误,没有。
答案 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