Class: CamaleonCmsLocalUploader
- Inherits:
-
CamaleonCmsUploader
- Object
- CamaleonCmsUploader
- CamaleonCmsLocalUploader
- Defined in:
- app/uploaders/camaleon_cms_local_uploader.rb
Constant Summary
Constants inherited from CamaleonCmsUploader
CamaleonCmsUploader::PRIVATE_DIRECTORY
Instance Attribute Summary
Attributes inherited from CamaleonCmsUploader
Instance Method Summary collapse
-
#add_file(uploaded_io_or_file_path, key, args = {}) ⇒ Object
save a file into local folder.
-
#add_folder(key) ⇒ Object
create a new folder into local directory.
- #after_initialize ⇒ Object
- #browser_files(prefix = '/', _objects = {}) ⇒ Object
-
#delete_file(key) ⇒ Object
remove an existent file.
-
#delete_folder(key) ⇒ Object
remove an existent folder.
- #fetch_file(file_name) ⇒ Object
- #file_parse(key) ⇒ Object
-
#parse_key(file_path) ⇒ Object
convert a real file path into file key.
- #setup_private_folder ⇒ Object
Methods inherited from CamaleonCmsUploader
#cache_item, #clear_cache, #disable_private_mode!, #enable_private_mode!, #file_exists?, #get_file, get_file_format, get_file_format_extensions, #get_media_collection, #initialize, #objects, #reload, #search, #search_new_key, validate_file_format, #version_path
Constructor Details
This class inherits a constructor from CamaleonCmsUploader
Instance Method Details
#add_file(uploaded_io_or_file_path, key, args = {}) ⇒ Object
save a file into local folder
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'app/uploaders/camaleon_cms_local_uploader.rb', line 77 def add_file(uploaded_io_or_file_path, key, args = {}) args = { same_name: false, is_thumb: false }.merge(args) res = nil key = search_new_key(key) unless args[:same_name] if @instance # private hook to upload files by different way, add file data into result_data _args = { result_data: nil, file: uploaded_io_or_file_path, key: key, args: args, klass: self } @instance.hooks_run('uploader_local_before_upload', _args) return _args[:result_data] if _args[:result_data].present? end add_folder(File.dirname(key)) if File.dirname(key).present? upload_io = uploaded_io_or_file_path.is_a?(String) ? File.open(uploaded_io_or_file_path) : uploaded_io_or_file_path File.open(File.join(@root_folder, key), 'wb') { |file| file.write(upload_io.read) } res = cache_item(file_parse(key)) unless args[:is_thumb] res end |
#add_folder(key) ⇒ Object
create a new folder into local directory
96 97 98 99 100 101 102 103 104 105 106 |
# File 'app/uploaders/camaleon_cms_local_uploader.rb', line 96 def add_folder(key) d = File.join(@root_folder, key).to_s is_new_folder = false unless Dir.exist?(d) FileUtils.mkdir_p(d) is_new_folder = true if File.basename(d) != 'thumb' end f = file_parse(key) cache_item(f) if is_new_folder f end |
#after_initialize ⇒ Object
2 3 4 5 6 |
# File 'app/uploaders/camaleon_cms_local_uploader.rb', line 2 def after_initialize @root_folder = @args[:root_folder] || @current_site.upload_directory FileUtils.mkdir_p(@root_folder) end |
#browser_files(prefix = '/', _objects = {}) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'app/uploaders/camaleon_cms_local_uploader.rb', line 14 def browser_files(prefix = '/', _objects = {}) path = File.join(@root_folder, prefix) Dir.entries(path).each do |f_name| next if ['..', '.', 'thumb'].include?(f_name) obj = file_parse(File.join(path, f_name).sub(@root_folder, '').cama_fix_media_key) cache_item(obj) browser_files(File.join(prefix, obj['name'])) if obj['is_folder'] end end |
#delete_file(key) ⇒ Object
remove an existent file
116 117 118 119 120 121 |
# File 'app/uploaders/camaleon_cms_local_uploader.rb', line 116 def delete_file(key) file = File.join(@root_folder, key) FileUtils.rm(file) if File.exist? file @instance.hooks_run('after_delete', key) get_media_collection.find_by_key(key).take.destroy end |
#delete_folder(key) ⇒ Object
remove an existent folder
109 110 111 112 113 |
# File 'app/uploaders/camaleon_cms_local_uploader.rb', line 109 def delete_folder(key) folder = File.join(@root_folder, key) FileUtils.rm_rf(folder) if Dir.exist? folder get_media_collection.find_by_key(key).take.destroy end |
#fetch_file(file_name) ⇒ Object
27 28 29 30 31 |
# File 'app/uploaders/camaleon_cms_local_uploader.rb', line 27 def fetch_file(file_name) raise ActionController::RoutingError, 'File not found' unless file_exists?(file_name) file_name end |
#file_parse(key) ⇒ Object
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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'app/uploaders/camaleon_cms_local_uploader.rb', line 33 def file_parse(key) file_path = File.join(@root_folder, key) url_path = file_path.sub(Rails.root.join('public').to_s, '') is_dir = File.directory?(file_path) res = { 'name' => File.basename(key), 'folder_path' => File.dirname(key), 'url' => if is_dir '' else (if is_private_uploader? url_path.sub("#{@root_folder}/", '') else File.join( @current_site.decorate.the_url(as_path: true, locale: false, skip_relative_url_root: true), url_path ) end) end, 'is_folder' => is_dir, 'file_size' => is_dir ? 0 : File.size(file_path).round(2), 'thumb' => '', 'file_type' => self.class.get_file_format(file_path), 'dimension' => '' }.with_indifferent_access res['key'] = File.join(res['folder_path'], res['name']) if res['file_type'] == 'image' && File.extname(file_path).downcase != '.gif' res['thumb'] = (is_private_uploader? ? "/admin/media/download_private_file?file=#{version_path(key).slice(1..-1)}" : version_path(res['url'])) end if res['file_type'] == 'image' res['thumb'].sub! '.svg', '.jpg' im = MiniMagick::Image.open(file_path) res['dimension'] = begin "#{im[:width]}x#{im[:height]}" rescue StandardError '0x0' end end res end |
#parse_key(file_path) ⇒ Object
convert a real file path into file key
124 125 126 |
# File 'app/uploaders/camaleon_cms_local_uploader.rb', line 124 def parse_key(file_path) file_path.sub(@root_folder, '').cama_fix_media_key end |
#setup_private_folder ⇒ Object
8 9 10 11 12 |
# File 'app/uploaders/camaleon_cms_local_uploader.rb', line 8 def setup_private_folder @root_folder = Rails.root.join(self.class::PRIVATE_DIRECTORY).to_s FileUtils.mkdir_p(@root_folder) unless Dir.exist?(@root_folder) end |