about summary refs log tree commit homepage
path: root/examples/rails_app-2.3.4/app/controllers/files_controller.rb
diff options
context:
space:
mode:
Diffstat (limited to 'examples/rails_app-2.3.4/app/controllers/files_controller.rb')
-rw-r--r--examples/rails_app-2.3.4/app/controllers/files_controller.rb35
1 files changed, 24 insertions, 11 deletions
diff --git a/examples/rails_app-2.3.4/app/controllers/files_controller.rb b/examples/rails_app-2.3.4/app/controllers/files_controller.rb
index 6509a71..004c13e 100644
--- a/examples/rails_app-2.3.4/app/controllers/files_controller.rb
+++ b/examples/rails_app-2.3.4/app/controllers/files_controller.rb
@@ -1,21 +1,26 @@
 require 'digest/sha1'
 
 class FilesController < ApplicationController
-  defined?($upr) or before_filter do
-    # grab the backend in case we forget to set it (or if we're using DRb)
-    defined?($upr) or ObjectSpace.each_object(Upr::InputWrapper) do |x|
-      $upr ||= x.backend
+  # used by streaming upload progress
+  def new
+    if request.post?
+      size, hexdigest = _read_sha1_size
+      msg = "Successfully upload file (size: #{size}, sha1: #{hexdigest})"
+      flash[:notice] = msg
+      redirect_to "/files/new"
     end
   end
 
   def index
   end
 
+  # used by mup-compatible upload progress
   def status
     tmp = $upr.read(params[:upload_id]).inspect
     render :text => "#{Rack::Utils.escape_html(tmp)}\n"
   end
 
+  # used by mup-compatible upload progress
   def progress
     render :update do |page|
       status = $upr.read(params[:upload_id]) and
@@ -23,19 +28,27 @@ class FilesController < ApplicationController
     end
   end
 
+  # used by mup-compatible upload progress
   def upload
-    file = params[:data]
+    size, hexdigest = _read_sha1_size
+    render :text => "sha1: #{hexdigest}<br />" \
+                    "size: #{size}<br />" \
+                    '<script type="text/javascript">' \
+                    'window.parent.UploadProgress.finish();</script>'
+  end
+
+private
+
+  def _read_sha1_size
+    file = params[:data] or return [ -1, :unknown ]
+    File.unlink(file.path) if file.respond_to?(:path)
     digest = Digest::SHA1.new
     if buf = file.read(16384)
       begin
         digest.update(buf)
       end while file.read(16384, buf)
     end
-    size = file.stat.size
-    File.unlink(file.path)
-    render :text => "sha1: #{digest.hexdigest}<br />" \
-                    "size: #{size}<br />" \
-                    '<script type="text/javascript">' \
-                    'window.parent.UploadProgress.finish();</script>'
+    [ file.size, digest.hexdigest ]
   end
+
 end