From 84dac1d250bd5f6727844535323d75925c6f3efc Mon Sep 17 00:00:00 2001 From: Christophe Vilayphiou Date: Thu, 17 May 2012 09:30:21 +0800 Subject: [PATCH] Create FileAssetUploader --- app/models/asset.rb | 2 +- app/uploaders/asset_uploader.rb | 6 ++-- app/uploaders/file_asset.rb | 55 +++++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 app/uploaders/file_asset.rb diff --git a/app/models/asset.rb b/app/models/asset.rb index 9819934f..a4065f17 100644 --- a/app/models/asset.rb +++ b/app/models/asset.rb @@ -3,7 +3,7 @@ class Asset include Mongoid::Document include Mongoid::Timestamps - mount_uploader :data, AssetUploader + mount_uploader :data, FileAssetUploader field :filename field :description diff --git a/app/uploaders/asset_uploader.rb b/app/uploaders/asset_uploader.rb index f59e20a0..7b5749c9 100644 --- a/app/uploaders/asset_uploader.rb +++ b/app/uploaders/asset_uploader.rb @@ -48,8 +48,8 @@ class AssetUploader < CarrierWave::Uploader::Base # end # Override the filename of the uploaded files: - def filename - model.filename - end + # def filename + # model.filename + # end end diff --git a/app/uploaders/file_asset.rb b/app/uploaders/file_asset.rb new file mode 100644 index 00000000..0de9e67a --- /dev/null +++ b/app/uploaders/file_asset.rb @@ -0,0 +1,55 @@ +# encoding: utf-8 + +class FileAssetUploader < CarrierWave::Uploader::Base + require 'mime/types' + + process :set_content_type + + def set_content_type(*args) + content_type = file.content_type == ('binary/octet-stream' || 'application/octet-stream') || file.content_type.blank? ? MIME::Types.type_for(original_filename).first.to_s : file.content_type + self.file.instance_variable_set(:@content_type, content_type) + end + + # Include RMagick or ImageScience support: + # include CarrierWave::RMagick + # include CarrierWave::ImageScience + + # Choose what kind of storage to use for this uploader: + # storage :file + # storage :s3 + + # Override the directory where uploaded files will be stored. + # This is a sensible default for uploaders that are meant to be mounted: + def store_dir + "assets/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" + end + + # Provide a default URL as a default if there hasn't been a file uploaded: + # def default_url + # "/images/fallback/" + [version_name, "default.png"].compact.join('_') + # end + + # Process files as they are uploaded: + # process :scale => [200, 300] + # + # def scale(width, height) + # # do something + # end + + # Create different versions of your uploaded files: + # version :thumb do + # process :scale => [50, 50] + # end + + # Add a white list of extensions which are allowed to be uploaded. + # For images you might use something like this: + # def extension_white_list + # %w(jpg jpeg gif png) + # end + + # Override the filename of the uploaded files: + def filename + model.filename + end + +end