I''ve got a file upload that uploads an image to a server. That image is then manipulated via rmagick. I''ve only just found that for files less than 10KB in size, that the object is not a Tempfile, but a StringIO. If it''s a Tempfile (e.g. image file is over 10KB) the site works fine, but for small images, it fails! Thing is, that I can''t figure out how to get a StringIO into RMagick to create an imagemagick image, so that I can manipulate it. Can anyone help please? Paul ------------------------------------------------------------------------ *PJ Net Solutions Ltd* 0871 223 5370 http://www.pjnetsolutions.com Registered Number: 4131671 Registered Address: 35 Ballards Lane, London, N3 1XW Office Address: The Hub, 3-5 Rickmansworth Road, Watford, Herts, WD18 0GX --~--~---------~--~----~------------~-------~--~----~ 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?hl=en -~----------~----~----~----~------~----~------~--~---
I had EXACTLY this problem when I started using RMagick. What I do is always call f.read on whatever I get back. For instance, my form has this in it: <% form_for :avatar, @avatar, :url => { :action => ''create_avatar'', :id => @toon }, :html => { :multipart => true } do |f| %> <p><label for="avatar_image">Image</label><br/> <%= f.file_field :image_file %></p> <%= submit_tag "upload" %> <% end %> This means my image goes into "avatar_file" in my controller. I then call something like this in toon_controller: def create_avatar ... @avatar = @toon.avatars.create(params[:avatar]) ... end I think the f.rewind and f.read trick here are the key. From my avatar model: def image_file=(f) f.rewind self.image_binary = f.read end def image_binary=(data) imglist = Magick::Image.from_blob(data) img = imglist.first if img.columns > 75 || img.rows > 75 img.crop_resized!(75, 75, Magick::NorthGravity) end img.format = ''PNG'' self.image = Base64::encode64(img.to_blob) self.format = ''image/png'' self.width = img.columns self.height = img.rows GC.start end def image_binary Base64::decode64(self.image) end What this mess does is hide my ''image'' field. ''image'' is always SQL-safe Base64 encoded, while image_binary is the undecoded version. I won''t let people store more than the correct size in my database, so I adjust it on input and just base64 decode it on output. There are times where I want the actual base64 version (email springs to mind) but usually I just refer to image_binary and send that. --Michael --~--~---------~--~----~------------~-------~--~----~ 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?hl=en -~----------~----~----~----~------~----~------~--~---
Michael Graff wrote:> I had EXACTLY this problem when I started using RMagick. >Brilliant. Just what I needed. Sorted it now. Thanks Paul ------------------------------------------------------------------------ *PJ Net Solutions Ltd* 0871 223 5370 http://www.pjnetsolutions.com Registered Number: 4131671 Registered Address: 35 Ballards Lane, London, N3 1XW Office Address: The Hub, 3-5 Rickmansworth Road, Watford, Herts, WD18 0GX --~--~---------~--~----~------------~-------~--~----~ 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?hl=en -~----------~----~----~----~------~----~------~--~---
Paul Johnston wrote:> Michael Graff wrote: >> I had EXACTLY this problem when I started using RMagick. >> > > Brilliant. Just what I needed. Sorted it now. > > Thanks > > Paul > > ------------------------------------------------------------------------ >I had the same issue.. i solved by identifying whether the incoming uploaded file is an "image"..? is_image = (params[:image][:data].content_type.strip()[0..4] == ''image'') then i manipulate the object accordingly. But i got another strange behavior..!! In IE when i upload a gif image of 2.60KB, it''s mime-type is seen as "image/pjpeg" ?? But when i upload the same image in FF it''s correctly seen as "image/gif"!!! I need to restrict the image-upload to png/jpg type of images.. now i don''t know how to sort out this issue.. Kindly help me to overcome this weird behavior in IE.. -- 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?hl=en -~----------~----~----~----~------~----~------~--~---