2013-05-05 70 views
4

我試圖在Rails中找到處理文檔的文件,但沒有成功。這裏是File類的鏈接(由file_filed_tag的文檔指定): http://api.rubyonrails.org/classes/File.html我可以在Rails中保存上傳的文件?

我想這應該是一組更好的源文檔。我的主要問題是我可以在哪裏保存一個不可公開訪問的文件。我有興趣臨時使用文件上傳的文件作爲用戶的目的「嚮導」。

+0

如果你想讓它訪問在Heroku上,你可以使用的資源文件夾 – ahmet 2013-05-05 10:30:15

回答

4

Rails的文檔只mentions this in passing ,處理上載源是https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/upload.rb

你可以使用寶石「回形針」來處理你的文件上傳:

https://github.com/thoughtbot/paperclip

常規是將您上傳的文件存儲在公共/系統中,回形針中的默認 配置爲:

:rails_root/public/system/:class/:attachment/:id_partition/:style/:filename 

,但如果你想保持它公開,你可以將其更改爲另一主文件夾:

:rails_root/private/:class/:attachment/:id_partition/:style/:filename 
+0

感謝您鏈接到模塊源。我期待更多的文檔,無論是傳統還是技術。我意識到回形針的寶石,我想感受Rails的本地人?首先上傳。 – chrisp 2013-05-05 19:35:07

3

Rails的處理文件上傳就像任何web框架:它留下文件上傳的處理到您正在使用的Web服務器(Apache,Nginx等)。然後,當文件上傳完成時,它會爲您的框架提供上傳文件的位置(通常是臨時文件)(以及諸如MIME類型的內容)。您需要決定如何處理該文件。 Rails通過在你的控制器中提供一個Ruby文件對象來實現這一點。

如果您使用像「paperclip」這樣的gem,它可以讓您更多地控制文件,而不是自己處理文件,您可以自動調整圖像大小或其他上傳後的掛鉤,真的很值得研究。

如果您選擇自己做,則需要使用File對象(臨時文件)並將其寫入其他位置的控制器代碼。所以,如果你有一個多部分Web表單,需要一個文件:

<%= form_tag({:action => :upload}, :multipart => true) do %> 
    <%= file_field_tag 'picture' %> 
<% end %> 

你會最終在你的PARAMS哈希picture對象:

params[:picture] 

這是臨時文件。 Rails提供兩個額外的方法來確定原始文件名和MIME類型:

params[:picture].original_filename 
params[:picture].content_type