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, delete_block, #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, #valid_folder_path?, 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
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'app/uploaders/camaleon_cms_local_uploader.rb', line 79 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
98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'app/uploaders/camaleon_cms_local_uploader.rb', line 98 def add_folder(key) return { error: 'Invalid folder path' } unless valid_folder_path?(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 = @current_site.upload_directory FileUtils.mkdir_p(@root_folder) unless Dir.exist?(@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
122 123 124 125 126 127 128 129 |
# File 'app/uploaders/camaleon_cms_local_uploader.rb', line 122 def delete_file(key) return { error: 'Invalid file path' } if key.include?('..') 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
113 114 115 116 117 118 119 |
# File 'app/uploaders/camaleon_cms_local_uploader.rb', line 113 def delete_folder(key) return { error: 'Invalid folder path' } if key.include?('..') 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 32 33 |
# File 'app/uploaders/camaleon_cms_local_uploader.rb', line 27 def fetch_file(file_name) return { error: 'Invalid file path' } unless valid_folder_path?(file_name) return file_name if file_exists?(file_name) { error: 'File not found' } end |
#file_parse(key) ⇒ Object
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 75 76 |
# File 'app/uploaders/camaleon_cms_local_uploader.rb', line 35 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
132 133 134 |
# File 'app/uploaders/camaleon_cms_local_uploader.rb', line 132 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 |