file_uploader.rb
846 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 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