Hi all, I have a relatively newbie question regarding the processing of a file upload from a source other than a Rails form. I''d like to upload a file using a generic HTTP POST request that happens, in this case, to come from a Java applet. Each upload is a ZIP file that should be associated with particular activity ID and document ID. The (multipart) form-based version works fine, using the standard ActionView file_field helper and code like path = "/files/" + params[:upload][:data].original_filename root = "#{RAILS_ROOT}/public" data = params[:upload][:data].read File.open(path, ''wb'') do |f| f.write(data) end ...in the controller. What I''m wondering is how to handle the applet-based upload. I figured it might help to have a custom route defined that the applet would use, something like: map.connect ''activities/:activity_id/:document_id'', :controller => ''activities'', :action => ''new_upload_applet'', :activity_id => nil, :document_id => nil, :requirements => {:activity_id => /\d/, :document_id => /\d/} But then what? In the (hypothetical) new_upload_applet action, how do I access the file data itself (stored under params[:upload][:data] in the form-based version)? Any help would be greatly appreciated. Thanks in advance, Garrett -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk -~----------~----~----~----~------~----~------~--~---
Hi all, I have a relatively newbie question regarding the processing of a file upload from a source other than a Rails form. I''d like to upload a file using a generic HTTP POST request (which happens, in this case, to come from a Java applet, though that''s unimportant). Each upload is a ZIP file that should be associated with particular activity ID and document ID. The (multipart) form-based version works fine, using the standard ActionView file_field helper and code like path = "/files/" + params[:upload][:data].original_filename root = "#{RAILS_ROOT}/public" data = params[:upload][:data].read File.open(path, ''wb'') do |f| f.write(data) end ...in the controller. What I''m wondering is how to handle the applet-based upload. I figured it might help to have a custom route defined that the applet would use, something like: map.connect ''activities/:activity_id/:document_id'', :controller => ''activities'', :action => ''new_upload_applet'', :activity_id => nil, :document_id => nil, :requirements => {:activity_id => /\d/, :document_id => /\d/} But then what? In the (hypothetical) new_upload_applet action, how do I access the file data itself (stored under params[:upload][:data] in the form-based version)? Any help would be greatly appreciated. Thanks in advance, Garrett -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk -~----------~----~----~----~------~----~------~--~---
uhm ... a form-base upload is only a HTTP POST Request, isnt it?. so it should not make a difference weither you send that POST via an applet or form. Rails only sees a POST Request coming in, it cant see if it was eend by a applet,by an ajax call or a form or whatever.... in all cases, the file should be acceccible through the params hash. dont see where the problem is. or am i missing something? --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk -~----------~----~----~----~------~----~------~--~---
Garrett Weinberg wrote:> What I''m wondering is how to handle the applet-based upload. I > figured it might help to have a custom route defined that the applet > would use, something like: > > map.connect ''activities/:activity_id/:document_id'', > :controller => ''activities'', :action => ''new_upload_applet'', > :activity_id => nil, :document_id => nil, > :requirements => {:activity_id => /\d/, :document_id => /\d/} > > But then what? In the (hypothetical) new_upload_applet action, how do > I access the file data itself (stored under params[:upload][:data] in > the form-based version)? > > Any help would be greatly appreciated. Thanks in advance, > > GarrettIn theory, the applet should form a POST request that is indistinguishable from one submitted by the browser. Or if you are on edge, you can post a restful xml query and rails will extract the params. Although I am not sure how to encode binary data in the xml request. Base64 perhaps? And if your not edge, you can still POST xml with a Base64 encoded file and just manually parse it with REXML standard library. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk -~----------~----~----~----~------~----~------~--~---
Thorsten L wrote:> uhm ... a form-base upload is only a HTTP POST Request, isnt it?. > > so it should not make a difference weither you send that POST via an > applet or form. Rails only sees a POST Request coming in, it cant see > if it was eend by a applet,by an ajax call or a form or whatever.... > > in all cases, the file should be acceccible through the params hash. > > dont see where the problem is. or am i missing something?Yes, it seems you understand the situation. My (newbie) question is *where* in the params hash to look for the file given a particular custom route that the applet uses for the HTTP POST. So a basic example route & the params hash this would generate would help me out a lot. The params hash is more obvious to me in the normal, form-based version because I define the ActionView''s RHTML myself. It''s the *non* form-based version that has me confused. Thanks again, Garrett -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk -~----------~----~----~----~------~----~------~--~---
Hi all, I have a relatively newbie question regarding the processing of a file upload from a source other than a Rails form. I''d like to upload a file using a generic HTTP POST request that happens, in this case, to come from a Java applet. Each upload is a ZIP file that should be associated with particular activity ID and document ID. The (multipart) form-based version works fine, using the standard ActionView file_field helper and code like path = "/files/" + params[:upload][:data].original_filename root = "#{RAILS_ROOT}/public" data = params[:upload][:data].read File.open(path, ''wb'') do |f| f.write(data) end ...in the controller. What I''m wondering is how to handle the applet-based upload. I figured it might help to have a custom route defined that the applet would use, something like: map.connect ''activities/:activity_id/:document_id'', :controller => ''activities'', :action => ''new_upload_applet'', :activity_id => nil, :document_id => nil, :requirements => {:activity_id => /\d/, :document_id => /\d/} But then what? In the (hypothetical) new_upload_applet action, how do I access the file data itself (stored under params[:upload][:data] in the form-based version)? Any help would be greatly appreciated. Thanks in advance, Garrett