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
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'app/uploaders/camaleon_cms_local_uploader.rb', line 61 def add_file(uploaded_io_or_file_path, key, args = {}) args, res = {same_name: false, is_thumb: false}.merge(args), 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
78 79 80 81 82 83 84 85 86 87 |
# File 'app/uploaders/camaleon_cms_local_uploader.rb', line 78 def add_folder(key) d, is_new_folder = File.join(@root_folder, key).to_s, 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 26 27 |
# 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 f_name == '..' || f_name == '.' || f_name == 'thumb' obj = file_parse(File.join(path, f_name).sub(@root_folder, '').cama_fix_media_key) cache_item(obj) if obj['is_folder'] browser_files(File.join(prefix, obj['name'])) end end end |
#delete_file(key) ⇒ Object
remove an existent file
97 98 99 100 101 102 |
# File 'app/uploaders/camaleon_cms_local_uploader.rb', line 97 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
90 91 92 93 94 |
# File 'app/uploaders/camaleon_cms_local_uploader.rb', line 90 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
29 30 31 32 33 34 35 |
# File 'app/uploaders/camaleon_cms_local_uploader.rb', line 29 def fetch_file(file_name) if file_exists?(file_name) file_name else raise ActionController::RoutingError, 'File not found' end end |
#file_parse(key) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'app/uploaders/camaleon_cms_local_uploader.rb', line 37 def file_parse(key) file_path = File.join(@root_folder, key) url_path, is_dir = file_path.sub(Rails.root.join('public').to_s, ''), File.directory?(file_path) res = { "name" => File.basename(key), "folder_path" => File.dirname(key), "url" => is_dir ? '' : (is_private_uploader? ? url_path.sub("#{@root_folder}/", '') : File.join(@current_site.decorate.the_url(as_path: true, locale: false, skip_relative_url_root: true), url_path)), "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']) res["thumb"] = (is_private_uploader? ? '/admin/media/download_private_file?file=' + version_path(key).slice(1..-1) : version_path(res['url'])) if res['file_type'] == 'image' && File.extname(file_path).downcase != '.gif' if res['file_type'] == 'image' res["thumb"].sub! '.svg', '.jpg' im = MiniMagick::Image.open(file_path) res['dimension'] = "#{im[:width]}x#{im[:height]}" end res end |
#parse_key(file_path) ⇒ Object
convert a real file path into file key
105 106 107 |
# File 'app/uploaders/camaleon_cms_local_uploader.rb', line 105 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 |