I've been having trouble trying to get uploaded images to save correctly to a blob field in a MySQL database.
Here's my form view
VIEW:
I've been having trouble trying to get uploaded images to save correctly to a blob field in a MySQL database.
Here's my form view
VIEW:
See the attachment_fu plugin for Rails. It will do this for you Or if you want to know how to do it yourself, examine the source. It can persist to a file, a database, or S3.
http://svn.techno-weenie.net/projects/plugins/attachment_fu/
Yeah, I really didn't want to go that route, this should be a real simple thing, I shouldn't need a whole bloated plugin to just save a picture to a blob field. From what I can see, attachment_fu also does the rewind and read commands, that's where I got the ideas. How do I get it back into a blob from a string? since I think thats my problem...
I’m not sure, honestly. I know the plugin works. It’s far from bloated, and it’s already got tests written to prove it works, hich saves you time. I attempted to do this one time and it wasn’t worth my time to figure it out.
Perhaps someone else reading this can tell you what’s going on.
Yeah, I really didn't want to go that route, this should be a real simple thing, I shouldn't need a whole bloated plugin to just save a picture to a blob field. From what I can see, attachment_fu also does the rewind and read commands, that's where I got the ideas. How do I get it back into a blob from a string? since I think thats my problem...
Coming into this late, but this is what I do (@the_user is exactly what is sounds like and is defined elsewhere):
view --------------------------------------------------------------- <%= form_tag({:action => 'upload_avatar', :id => @the_user}, :multipart => true) %> Please select an image to upload. <br /> <%= file_field_tag :image_data %> <%= submit_tag 'Upload Avatar' %> <%= end_form_tag %>
controller --------------------------------------------------------- def upload_avatar avatar = Avatar.new(:user => @the_user) avatar.image_data = params[:image_data] avatar.save flash[:avatar_errors] = avatar.errors.full_messages redirect_to :action => 'manage_avatars' end
model (in a before hooks)---------------------------------------------------- # may be a string or a stringio data = if image_data.respond_to?(:rewind) image_data.rewind image_data.read else image_data end
img = GD2::Image.load(data)
unless img.width == IMAGE_WIDTH && img.height == IMAGE_HEIGHT img.resize!(IMAGE_WIDTH, IMAGE_HEIGHT, true) end
self.image_data = img.jpeg(75)
sql ------------------------------------------- ...
image_data | blob | YES | | NULL | |
...
My co-worker got this working using Philip's code, which is pretty
much what I tried before. Actually, it's exactly the same, rewind then
read. So maybe it was my localhost acting up and playing tricks on me.
I appreciate all you help, and I think we can call this one closed
Summary - how it should work:
model (in a before hooks)---------------------------------------------------- # may be a string or a stringio data = if image_data.respond_to?(:rewind) image_data.rewind image_data.read else image_data end