aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch/utils/uploaded_file.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/lib/action_dispatch/utils/uploaded_file.rb')
-rw-r--r--actionpack/lib/action_dispatch/utils/uploaded_file.rb44
1 files changed, 44 insertions, 0 deletions
diff --git a/actionpack/lib/action_dispatch/utils/uploaded_file.rb b/actionpack/lib/action_dispatch/utils/uploaded_file.rb
new file mode 100644
index 0000000000..97dffa089f
--- /dev/null
+++ b/actionpack/lib/action_dispatch/utils/uploaded_file.rb
@@ -0,0 +1,44 @@
+module ActionDispatch
+ module UploadedFile
+ def self.included(base)
+ base.class_eval do
+ attr_accessor :original_path, :content_type
+ alias_method :local_path, :path
+ end
+ end
+
+ def self.extended(object)
+ object.class_eval do
+ attr_accessor :original_path, :content_type
+ alias_method :local_path, :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
+
+ class UploadedStringIO < StringIO
+ include UploadedFile
+ end
+
+ class UploadedTempfile < Tempfile
+ include UploadedFile
+ end
+end