2013-08-25 105 views
0

我有一個Rails 4應用程序,它使用Carrierwave和Fog將文件上傳到Amazon S3。該應用使用的服務器是Nginx和Thin。Carrierwave /霧到S3失敗,文件超過5MB

我遇到的問題是上傳文件超過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

完成。我正在尋找可能導致這種情況的原因,它可能是某處出現超時事件,或者出於某種原因,AWS S3不想採用大於5MB的文件。 – user1983787

+0

我已經縮小了大於5mb的文件和Carrierwave。當我僅使用Fog上傳時,它可以正常工作,但是當Carrierwave處於混音狀態時,它完全失敗。這就像它不知道如何告訴霧做一個分段上傳。 – user1983787

回答

0

使用Carrierwave Direct,它看起來像您需要稍微不同地設置表單(因爲它需要將url設置爲S3上的一個,而不是您自己的服務器上)。如果您正在處理大型文件,這可能更可取,因爲大型文件會延長處理時間。爲了使這項工作,它看起來像你想使用的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

+0

是的,我試過這個,但就像我說的,當我嘗試它時,我仍然無法上傳大於5MB的文件。 – user1983787

相關問題