aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch/http/upload.rb
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2010-01-16 13:17:03 +0100
committerJosé Valim <jose.valim@gmail.com>2010-01-16 15:45:07 +0100
commit92f49b5f1ebf42514c58e1fda87c0b8a1b33d08f (patch)
tree860e27b214bbb5e03ea235eae32558ba6fb23515 /actionpack/lib/action_dispatch/http/upload.rb
parent5a52523a800c8a57d1ad80ad3a0ba81711cce38e (diff)
downloadrails-92f49b5f1ebf42514c58e1fda87c0b8a1b33d08f.tar.gz
rails-92f49b5f1ebf42514c58e1fda87c0b8a1b33d08f.tar.bz2
rails-92f49b5f1ebf42514c58e1fda87c0b8a1b33d08f.zip
Split ActionDispatch http in smaller chunks.
Diffstat (limited to 'actionpack/lib/action_dispatch/http/upload.rb')
-rw-r--r--actionpack/lib/action_dispatch/http/upload.rb48
1 files changed, 48 insertions, 0 deletions
diff --git a/actionpack/lib/action_dispatch/http/upload.rb b/actionpack/lib/action_dispatch/http/upload.rb
new file mode 100644
index 0000000000..dc6121b911
--- /dev/null
+++ b/actionpack/lib/action_dispatch/http/upload.rb
@@ -0,0 +1,48 @@
+module ActionDispatch
+ module Http
+ module UploadedFile
+ def self.extended(object)
+ object.class_eval do
+ attr_accessor :original_path, :content_type
+ alias_method :local_path, :path if method_defined?(:path)
+ end
+ end
+
+ # Take the basename of the upload's original filename.
+ # This handles the full Windows paths given by Internet Explorer
+ # (and perhaps other broken user agents) without affecting
+ # those which give the lone filename.
+ # The Windows regexp is adapted from Perl's File::Basename.
+ def original_filename
+ unless defined? @original_filename
+ @original_filename =
+ unless original_path.blank?
+ if original_path =~ /^(?:.*[:\\\/])?(.*)/m
+ $1
+ else
+ File.basename original_path
+ end
+ end
+ end
+ @original_filename
+ end
+ end
+
+ module Upload
+ # Convert nested Hashs to HashWithIndifferentAccess and replace
+ # file upload hashs with UploadedFile objects
+ def normalize_parameters(value)
+ if Hash === value && value.has_key?(:tempfile)
+ upload = value[:tempfile]
+ upload.extend(UploadedFile)
+ upload.original_path = value[:filename]
+ upload.content_type = value[:type]
+ upload
+ else
+ super
+ end
+ end
+ private :normalize_parameters
+ end
+ end
+end \ No newline at end of file