Interesting. This is definitely a step in a productive direction and I
am very thankful for the suggestions that you have given.  It's not
*quite* doing the trick, but it's the closest I've been so far.
Here's the scoop:

First, to do this, I had to make :content_type
and :filename :attr_accessible and make a setter for temp_data in my
asset class, since it's not a setter attribute. This method calls
set_temp_data in attachment_fu, like so:

def temp_data=
 set_temp_data(data)
end

I  then followed your suggestion  in the controller, like so, but
getting the mime_type from mimetype_fu, in case it's not always "image/
jpeg"

image_params = {:temp_data => params
['image_uploaded_data'], :filename=> params
['image_uploaded_data'], :content_type => File.mime_type?(params
['image_uploaded_data'])}

Note that each of values is the same field: params
['image_uploaded_data'] is the string of the filename that comes in.

At this point, I ran the code and for the first time the process
worked: the  image validated, and it was stored on s3.  However, the
image itself was not the image exported from Flash: it was a jpeg *of*
the string of filename. You can see it here:
http://s3.amazonaws.com/canvasband_development/assets/255/v1/1152215550.jpg

Weird. So I looked more closely at attachment_fu, and saw that in the
uploaded_data= method, the seemingly relevant lines here pass the data
from the file to set_temp_data, like so:

(line 334)
 if file_data.is_a?(StringIO)
    file_data.rewind
    set_temp_data file_data.read
else
  self.temp_paths.unshift file_data
end

So I switched my temp data setter to mimic that:
def temp_data=(data)
    data.rewind
    set_temp_data(data.read)
  end

and tried again, at which point I received the error:
NoMethodError (undefined method `rewind' for "1152233660.jpg":String)

So I then tried to convert the string to a stringIO object,

 def temp_data=(data)
    datastr = StringIO.new(data)
    datastr.rewind
    set_temp_data(datastr.read)
  end

Which then worked again -- ie, saved and uploaded the image -- except
the "image" it saved was still a jpeg of the filename, again visible
on s3
http://s3.amazonaws.com/canvasband_development/assets/263/v1/1152241736_thumb.jpg,
but not what Flash sent in.

Which seems to bring me back to the original problem, namely: despite
the fact that the binary data is coming into the application, by the
time I'm in the controller I can't figure out how to access that data,
and am only managing to get  this pseudo-image.

Is there anything else you can think of here?

Thanks again for your input thus far,
Sarah

On Jan 15, 5:06 pm, Peter De Berdt <peter.de.be...@pandora.be> wrote:
> On 15 Jan 2009, at 19:55, sarah wrote:
>
>
>
> > What is happening for us is that I am able to get the content-type as
> > "image/jpeg" using mimetype_fu, but that is as far as things go. If I
> > then try to save that data in the controller (using attachment_fu),
> > like so:
>
> > image_params = {:uploaded_data => params['image_uploaded_data']}
> > image = @visual_note.build_image(image_params.merge(:created_by =>
> > current_user))
> > if image.valid?
> > #do stuff
> > else
> > #errors
> > end
>
> > Errors are thrown because file_data -- the string passed in through my
> > params[:image_uploaded_data] from Flash does not respond to
> > content_type or original_filename
>
> > ***
>
> > Am I missing something from the point where the I am receiving the
> > data in the controller and getting it to attachment_fu? It doesn't
> > know it is application/octet-stream because it doesn't respond to
> > content-type at the controller level.
>
> How about:
>
> image_params = {:temp_data => params['image_uploaded_data'],
>                  :filename => "whateveruwant",
>                  :content_type => "image/jpeg"
>                 }
> image = @visual_note.build_image(image_params.merge(:created_by =>
> current_user))
> if image.valid?
>      #do stuff
> else
>      #errors
> end
>
> Means the data that comes from Flash will be processed and you  
> manually set the other fields.
>
> Best regards
>
> Peter De Berdt
--~--~---------~--~----~------------~-------~--~----~
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@googlegroups.com
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to