file_uploader.rb 846 Bytes
# encoding: utf-8
class FileUploader < CarrierWave::Uploader::Base
  storage :file

  def initialize(base_dir, path = '', allowed_extensions = nil)
    @base_dir = base_dir
    @path = path
    @allowed_extensions = allowed_extensions
  end

  def base_dir
    @base_dir
  end

  def store_dir
    File.join(@base_dir, @path)
  end

  def cache_dir
    File.join(@base_dir, 'tmp', @path)
  end

  def extension_white_list
    @allowed_extensions
  end

  def store!(file)
    file.original_filename = self.class.generate_filename(file)
    super
  end

  def self.generate_filename(file)
    original_filename = File.basename(file.original_filename, '.*')
    extension = File.extname(file.original_filename)
    new_filename = Digest::MD5.hexdigest(original_filename) + extension
  end

  def self.generate_dir
    SecureRandom.hex(5)
  end
end