Module: CarrierWave::Uploader::Cache
- Extended by:
- ActiveSupport::Concern
- Includes:
- Callbacks, Configuration
- Defined in:
- lib/carrierwave/uploader/cache.rb
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary collapse
-
#cache!(new_file) ⇒ Object
Caches the given file.
-
#cache_name ⇒ Object
Returns a String which uniquely identifies the currently cached file for later retrieval.
-
#cache_stored_file! ⇒ Object
Caches the remotely stored file.
-
#cached? ⇒ Boolean
Returns true if the uploader has been cached.
-
#retrieve_from_cache!(cache_name) ⇒ Object
Retrieves the file with the given cache_name from the cache.
Methods included from Callbacks
Instance Method Details
#cache!(new_file) ⇒ Object
Caches the given file. Calls process! to trigger any process callbacks.
By default, cache!() uses copy_to(), which operates by copying the file to the cache, then deleting the original file. If move_to_cache() is overriden to return true, then cache!() uses move_to(), which simply moves the file to the cache. Useful for large files.
Parameters
- new_file (File, IOString, Tempfile)
-
any kind of file object
Raises
- CarrierWave::FormNotMultipart
-
if the assigned parameter is a string
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/carrierwave/uploader/cache.rb', line 115 def cache!(new_file) new_file = CarrierWave::SanitizedFile.new(new_file) unless new_file.empty? raise CarrierWave::FormNotMultipart if new_file.is_path? && ensure_multipart_form with_callbacks(:cache, new_file) do self.cache_id = CarrierWave.generate_cache_id unless cache_id @filename = new_file.filename self.original_filename = new_file.filename if move_to_cache @file = new_file.move_to(cache_path, ) else @file = new_file.copy_to(cache_path, ) end end end end |
#cache_name ⇒ Object
Returns a String which uniquely identifies the currently cached file for later retrieval
Returns
- String
-
a cache name, in the format YYYYMMDD-HHMM-PID-RND/filename.txt
95 96 97 |
# File 'lib/carrierwave/uploader/cache.rb', line 95 def cache_name File.join(cache_id, full_original_filename) if cache_id and original_filename end |
#cache_stored_file! ⇒ Object
Caches the remotely stored file
This is useful when about to process images. Most processing solutions require the file to be stored on the local filesystem.
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/carrierwave/uploader/cache.rb', line 72 def cache_stored_file! return if file.nil? _content = file.read if _content.is_a?(File) # could be if storage is Fog sanitized = CarrierWave::Storage::Fog.new(self).retrieve!(File.basename(_content.path)) sanitized.read rescue '' else sanitized = SanitizedFile.new :tempfile => StringIO.new(file.read), :filename => File.basename(path), :content_type => file.content_type end cache! sanitized end |
#cached? ⇒ Boolean
Returns true if the uploader has been cached
Returns
- Bool
-
whether the current file is cached
62 63 64 |
# File 'lib/carrierwave/uploader/cache.rb', line 62 def cached? @cache_id end |
#retrieve_from_cache!(cache_name) ⇒ Object
Retrieves the file with the given cache_name from the cache.
Parameters
- cache_name (String)
-
uniquely identifies a cache file
Raises
- CarrierWave::InvalidParameter
-
if the cache_name is incorrectly formatted.
147 148 149 150 151 152 153 |
# File 'lib/carrierwave/uploader/cache.rb', line 147 def retrieve_from_cache!(cache_name) with_callbacks(:retrieve_from_cache, cache_name) do self.cache_id, self.original_filename = cache_name.to_s.split('/', 2) @filename = original_filename @file = CarrierWave::SanitizedFile.new(cache_path) end end |