Welcome to mirror list, hosted at ThFree Co, Russian Federation.

file_uploader.rb « uploaders « app - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 51ae8040e528aa9098efdf0fb1809bb58550d8ea (plain)
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# 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 || super
  end

  def store!(file)
    @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

  def secure_url
    path_array = @path.split('/')
    path = File.join(path_array[0],path_array[1],'uploads',path_array[2])
    Gitlab.config.gitlab.relative_url_root + "/#{path}/#{@filename}"
  end

  def image?
    img_ext = %w(png jpg jpeg gif bmp tiff)
    if file.respond_to?(:extension)
      img_ext.include?(file.extension.downcase)
    else
      # Not all CarrierWave storages respond to :extension
      ext = file.path.split('.').last.downcase
      img_ext.include?(ext)
    end
  rescue
    false
  end
end