class Ramaze::Helper::Upload::UploadedFile
This class represents an uploaded file.
@author Lars Olsson @since 18-08-2011
Attributes
Suggested file name @return [String]
MIME-type @return [String]
Public Class Methods
Initializes a new Ramaze::Helper::Upload::UploadedFile object.
@param [String] filename Suggested file name @param [String] type MIME-type @param [File] tempfile temporary file @param [Hash] options Options for uploaded files. Options supported
match those available to Ramaze::Helper::Upload::ClassMethods#upload_options
@return [Ramaze::Helper::Upload::UploadedFile] A new
Ramaze::Helper::Upload::UploadedFile object
@see save @see Ramaze::Helper::Upload::ClassMethods#upload_options
# File lib/ramaze/helper/upload.rb, line 378 def initialize(filename, type, tempfile, options) @filename = File.basename(filename) @type = type @tempfile = tempfile @realfile = nil trait :options => options end
Public Instance Methods
Changes the suggested filename of this Ramaze::Helper::Upload::UploadedFile.
name
should be a string representing the filename (only the
filename, not a complete path), but if you provide a complete path this
method it will try to identify the filename and use that instead.
@param [String] name The new suggested filename.
# File lib/ramaze/helper/upload.rb, line 396 def filename=(name) @filename = File.basename(name) end
Returns the path of the Ramaze::Helper::Upload::UploadedFile object. The method will always return nil before save has been called on the Ramaze::Helper::Upload::UploadedFile object.
@return [String|nil]
# File lib/ramaze/helper/upload.rb, line 407 def path return self.saved? ? @realfile.path : nil end
Saves the Ramaze::Helper::Upload::UploadedFile.
If path
is not set, the method checks whether there exists
default options for the path and tries to use that instead.
If you need to override any options set in the controller (using
upload_options) you can set the corresponding option in
options
to override the behavior for this particular Ramaze::Helper::Upload::UploadedFile object.
@param [String] path Path where the
Ramaze::Helper::Upload::UploadedFile will be saved
@param [Hash] options Options for uploaded files. Options supported
match those available to Ramaze::Helper::Upload::ClassMethods#upload_options
@raise [StandardError] Will be raised if the save operation fails. @see initialize @see Ramaze::Helper::Upload::ClassMethods#upload_options
# File lib/ramaze/helper/upload.rb, line 431 def save(path = nil, options = {}) # Merge options opts = trait[:options].merge(options) unless path # No path was provided, use info stored elsewhere to try to build # the path unless opts[:default_upload_dir] raise StandardError.new('Unable to save file, no dirname given') end unless @filename raise StandardError.new('Unable to save file, no filename given') end # Check to see if a proc or a string was used for the # default_upload_dir parameter. If it was a proc, call the proc and # use the result as the directory part of the path. If a string was # used, use the string directly as the directory part of the path. dn = opts[:default_upload_dir] if dn.respond_to?(:call) dn = dn.call end path = File.join(dn, @filename) end path = File.expand_path(path) # Abort if file altready exists and overwrites are not allowed if File.exists?(path) and !opts[:allow_overwrite] raise StandardError.new('Unable to overwrite existing file') end # Confirm that we can read source file unless File.readable?(@tempfile.path) raise StandardError.new('Unable to read temporary file') end # Confirm that we can write to the destination file unless (File.exists?(path) and File.writable?(path)) or (File.exists?(File.dirname(path)) and File.writable?(File.dirname(path))) raise StandardError.new( "Unable to save file to #{path}. Path is not writable" ) end # If supported, use IO,copy_stream. If not, require fileutils # and use the same method from there if IO.respond_to?(:copy_stream) IO.copy_stream(@tempfile, path) else require 'fileutils' File.open(@tempfile.path, 'rb') do |src| File.open(path, 'wb') do |dest| FileUtils.copy_stream(src, dest) end end end # Update the realfile property, indicating that the file has been # saved @realfile = File.new(path) # But no need to keep it open @realfile.close # If the unlink_tempfile option is set to true, delete the temporary # file created by Rack unlink_tempfile if opts[:unlink_tempfile] end
Returns whether the Ramaze::Helper::Upload::UploadedFile has been saved or not.
@return [Boolean]
# File lib/ramaze/helper/upload.rb, line 510 def saved? return !@realfile.nil? end
Deletes the temporary file associated with this Ramaze::Helper::Upload::UploadedFile immediately.
# File lib/ramaze/helper/upload.rb, line 518 def unlink_tempfile File.unlink(@tempfile.path) @tempfile = nil end