summaryrefslogtreecommitdiff
path: root/app/uploaders/file_uploader.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/uploaders/file_uploader.rb')
-rw-r--r--app/uploaders/file_uploader.rb41
1 files changed, 41 insertions, 0 deletions
diff --git a/app/uploaders/file_uploader.rb b/app/uploaders/file_uploader.rb
new file mode 100644
index 00000000000..cbc9271ac14
--- /dev/null
+++ b/app/uploaders/file_uploader.rb
@@ -0,0 +1,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