2012-07-25 91 views
12

我正在開發一個需要文件上傳/下載的Ruby on Rails應用程序。對於上傳部分,我使用了寶石載波,因爲它非常易於使用和靈活。問題是:一旦我上傳文件,我需要知道一些事情:即如果它是一個PDF而不是下載文件,我顯示它內聯,並且圖像也是如此。如何獲得文件擴展名,我怎麼能這樣做發送文件給用戶?任何反饋表示讚賞謝謝!Carrierwave如何獲得文件擴展

回答

30

確定文件的擴展名(我想爲安裝上傳者的名字是「文件」):

file = my_model.file.url 
extension = my_model.file.file.extension.downcase 

然後準備啞劇和處置瓦爾:

disposition = 'attachment' 
mime = MIME::Types.type_for(file).first.content_type 

if %w{jpg png jpg gif bmp}.include?(extension) or extension == "pdf" 
    disposition = 'inline' 
end 

(如果要添加其他擴展名) 。

然後發送文件:

send_file file, :type => mime, :disposition => disposition 
+0

非常感謝你,我喜歡你的解決方案的風格,它的工作完美。再次感謝您的回覆! – Wiggin 2012-07-25 09:19:55

+0

哪裏確切地在rails項目文件中放置了處置和MIME類型變量? – maumercado 2012-10-12 02:02:15

2

一旦你上傳了一個文件,名字就存儲在數據庫中。這也包括擴展。假設你有一個User模型安裝爲asset的上傳,那麼你就可以得到它爲:

user.asset.file.extension 

至於它發送給用戶,如果你調用user.asset_url,它會給你的URL文件所在上傳。用戶可以使用該鏈接來獲取文件。或者我誤解了「將文件發送給用戶」的含義?

+0

感謝回答!好吧,我想讓用戶下載文件。你知道,donwload對話框(打開..或保持它或鉻案例保持或拒絕。)我認爲用一個簡單的send_file帶參數會沒事的。 – Wiggin 2012-07-25 08:57:39

+0

那麼,只需鏈接到該文件。你可以通過'user.asset_url'獲得URL。 – 2012-07-25 09:15:49

+0

是的,我做到了!你的建議工作完美,非常感謝! – Wiggin 2012-07-25 09:19:23

相關問題