2012-02-03 51 views
9

我有一個CarrierWave上傳器,應接受各種文件類型。有些是圖像類型(例如jpg,png),其他則不是。與CarrierWave混合文件類型

我想創建上傳文件的媒體版本

version :medium do 
    process :resize_to_fit => [300, 300] 
end 

由於這僅適用於圖像文件,我怎麼能圖片和其他類型之間的區別,而忽略了非圖像文件的大小調整?

目前,CarrierWave嘗試處理文件,而不管文件的類型如何,如果該文件不是圖像,將導致MiniMagick處理錯誤。

+1

你想用這個上傳的視頻和音頻嗎? – 2012-02-03 14:45:23

+0

是的。和PDF。和TXT。和EXE。和ZIP ... – tobiasbayer 2012-02-03 18:57:43

+0

我從來沒有嘗試過,但如果你檢查在'版本'塊之前上傳文件擴展名? – 2012-02-04 04:06:35

回答

13

按照Carrierwave Docs你可以做條件處理:

version :medium, :if => :image? do 
    process :resize_to_fit => [300, 300] 
end 

protected 

def image?(new_file) 
    new_file.content_type.include? 'image' 
end 

其實更完整的答案,我發現here