2012-02-03 64 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