Hi I have a site which is working quite nicely at the moment but i want to batch upload a large amount of data from a csv file. Up until now i have added new items by hand through the forms, now i have a script to do it. The script is fine up until i try to run the images through file_column. The problem being that the images are stored as url''s. So question is how can i present to url''s to file column in a way that it understands how to follow them and get the files or alternatively how can i get the images pointed to by the url and then present them to file_column as if they were uploaded data. thanks alot regards c -- 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 -~----------~----~----~----~------~----~------~--~---
On 11 October 2006 18:34, Clare wrote:> Hi I have a site which is working quite nicely at the moment but i want > to batch upload a large amount of data from a csv file. Up until now i > have added new items by hand through the forms, now i have a script to > do it. The script is fine up until i try to run the images through > file_column. The problem being that the images are stored as url''s. So > question is how can i present to url''s to file column in a way that it > understands how to follow them and get the files or alternatively how > can i get the images pointed to by the url and then present them to > file_column as if they were uploaded data.I think the best way is to handle such cases manually and not alter the file_column. Something like that: require ''open-uri'' uri = "http://somewhere.example.com/myimage.gif" open(uri) do |remote| uploadedfile = StringIO.new(remote.read) end filename = File.basename(uri) (class << uploadedfile; self; end).class_eval do define_method(:local_path) { "" } define_method(:original_filename) { filename } define_method(:content_type) { "application/octet-stream" } end Then assign this uploadedfile to file_column attribute. --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Dear Maxim Thank you very much for replying but sadly I''m not yet good enough to understand your fancy code. I used it as follows but recieced the following error: Sorry i usually have a better crack at solving issues but I don''t understand what is going on in the section that begins (class << uploadedfile; self; end).class_eval. If you get time to reply that would be excellent, if not thanks for giving me something to investigate further. regards c NameError: undefined local variable or method `uploadedfile'' for VoObject:Class from /usr/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/base.rb:1129:in `method_missing'' if imageLink.size > 0 uri = "http://www.desperateseller.co.uk/DespSellPhotos/101946825798.jpg" open(uri) do |remote| uploadedfile = StringIO.new(remote.read) end filename = File.basename(uri) (class << uploadedfile; self; end).class_eval do define_method(:local_path) { "" } define_method(:original_filename) { filename } define_method(:content_type) { "application/octet-stream" } end vobject.primary_image = uploadedfile end Maxim Kulkin wrote:> On 11 October 2006 18:34, Clare wrote: >> Hi I have a site which is working quite nicely at the moment but i want >> to batch upload a large amount of data from a csv file. Up until now i >> have added new items by hand through the forms, now i have a script to >> do it. The script is fine up until i try to run the images through >> file_column. The problem being that the images are stored as url''s. So >> question is how can i present to url''s to file column in a way that it >> understands how to follow them and get the files or alternatively how >> can i get the images pointed to by the url and then present them to >> file_column as if they were uploaded data. > > I think the best way is to handle such cases manually and not alter the > file_column. Something like that: > > require ''open-uri'' > > uri = "http://somewhere.example.com/myimage.gif" > > open(uri) do |remote| > uploadedfile = StringIO.new(remote.read) > end > > filename = File.basename(uri) > (class << uploadedfile; self; end).class_eval do > define_method(:local_path) { "" } > define_method(:original_filename) { filename } > define_method(:content_type) { "application/octet-stream" } > end > > Then assign this uploadedfile to file_column attribute.-- 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 -~----------~----~----~----~------~----~------~--~---
Clare wrote:> Thank you very much for replying but sadly I''m not yet good enough to > understand your fancy code. > > Sorry i usually have a better crack at solving issues but I don''t > understand what is going on in the section that begins (class << > uploadedfile; self; end).class_eval. If you get time to reply that would > be excellent, if not thanks for giving me something to investigate > further."class << uploadedfile; self; end" is a common technique to get singleton class for that very instance to be able to extend it. I think it could be done in a more simple way, I just took a code from file_column''s test method that simulate an uploaded file. In Rails, uploaded file is an IO object or the like (which has "read" method) extended with some instance methods (local_path, original_filename, content_type). Regarding your error, I think you haven''t required ''open-uri'' library and this line uploadedfile = StringIO.new(remote.read) haven''t got executed. That''s probably why you''ve got "undefined variable" error. I suggest you to put all the code inside open(uri) block so you''ll ensure that nothing will happen if it is unable to open that uri.> if imageLink.size > 0 > uri > "http://www.desperateseller.co.uk/DespSellPhotos/101946825798.jpg" > open(uri) do |remote| > uploadedfile = StringIO.new(remote.read) > end > > filename = File.basename(uri) > (class << uploadedfile; self; end).class_eval do > define_method(:local_path) { "" } > define_method(:original_filename) { filename } > define_method(:content_type) { "application/octet-stream" } > end > > vobject.primary_image = uploadedfile > end--~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Thanks again, got it working really silly error uploadedfile = nil needs to be added before the open(uri) block. really should have spotted that. cheers c -- 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 -~----------~----~----~----~------~----~------~--~---