engine/app/uploaders/asset_uploader.rb

74 lines
1.9 KiB
Ruby
Raw Normal View History

2010-05-12 00:16:39 +00:00
# encoding: utf-8
class AssetUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
def store_dir
"sites/#{model.collection.site_id}/assets/#{model.id}"
end
def cache_dir
"#{Rails.root}/tmp/uploads"
end
2010-05-12 00:16:39 +00:00
version :thumb do
process :resize_to_fill => [50, 50]
process :convert => 'png'
end
2010-05-12 00:16:39 +00:00
version :medium do
process :resize_to_fill => [80, 80]
process :convert => 'png'
end
version :preview do
process :resize_to_fit => [880, 1100]
process :convert => 'png'
2010-05-12 00:16:39 +00:00
end
process :set_content_type
process :set_size
2010-05-12 00:16:39 +00:00
process :set_width_and_height
2010-10-10 14:37:34 +00:00
def set_content_type(*args)
2010-05-12 00:16:39 +00:00
value = :other
content_type = file.content_type == 'application/octet-stream' ? File.mime_type?(original_filename) : file.content_type
2010-05-12 00:16:39 +00:00
self.class.content_types.each_pair do |type, rules|
rules.each do |rule|
case rule
when String then value = type if content_type == rule
when Regexp then value = type if (content_type =~ rule) == 0
2010-05-12 00:16:39 +00:00
end
end
end
2010-05-12 00:16:39 +00:00
model.content_type = value
end
2010-10-10 14:37:34 +00:00
def set_size(*args)
2010-05-12 00:16:39 +00:00
model.size = file.size
end
2010-05-12 00:16:39 +00:00
def set_width_and_height
if model.image?
model.width, model.height = `identify -format "%wx%h" #{file.path}`.split(/x/).collect(&:to_i)
end
end
2010-05-12 00:16:39 +00:00
def self.content_types
{
:image => ['image/jpeg', 'image/pjpeg', 'image/gif', 'image/png', 'image/x-png', 'image/jpg'],
:video => [/^video/, 'application/x-shockwave-flash', 'application/x-swf'],
2010-05-12 00:16:39 +00:00
:audio => [/^audio/, 'application/ogg', 'application/x-mp3'],
:pdf => ['application/pdf', 'application/x-pdf'],
:stylesheet => ['text/css'],
2010-07-17 20:51:52 +00:00
:javascript => ['text/javascript', 'text/js', 'application/x-javascript', 'application/javascript'],
:font => ['application/x-font-ttf', 'application/vnd.ms-fontobject', 'image/svg+xml', 'application/x-woff']
}
2010-05-12 00:16:39 +00:00
end
2010-05-12 00:16:39 +00:00
end