如何在rails 3.1.1中将图像写入文件系统?

我觉得我应该非常接近,但我不能让这个工作得恰到好处。

我正在使用filegnsfer从我的phonegap应用程序发送图像到我的rails应用程序(3.1.1 ruby​​ 1.8.7顺便说一句)。

我想将文件写入文件系统。

这是params哈希:

Parameters: {"file"=>#<ActionDispatch::Http::UploadedFile:0x7f1e2baa94e8 @tempfile=#, @headers="Content-Disposition: form-data; name=\"file\"; filename=\"image.jpg\"\r\nContent-Type: image/jpeg\r\n", @content_type="image/jpeg", @original_filename="image.jpg">} 

基本上,我可以通过params [:file]访问该文件。 现在我需要将该图像写入我的文件系统。 我没有图像对应的模型,所以我真的不需要回形针。 现在,我能想到的最好的是:

 open(params[:file]) do |image| File.open("theiamge.jpg","wb"){|file| file.puts image.read } end 

这是我得到的错误:

 TypeError (can't convert ActionDispatch::Http::UploadedFile into String): 

编辑:

所以,这很奇怪。 我可以在我的irb中使用这些命令:

  File.open('newimage.jpg', 'wb') do |f| f.write File.open('oldimage.jpg').read end 

但是,这不起作用:

  File.open("ihatedetails.jpg",'wb') do |f| f.write File.open(params[:file]).read end 

我收到此错误:TypeError(无法将ActionDispatch :: Http :: UploadedFile转换为String):

我在我的irb中使用ruby 1.9.3,但这些命令应该是相同的……

所以我现在很难过。

代码应该是:

 File.open("ihatedetails.jpg",'wb') do |f| f.write params[:file].read end 

File.open("ihatedetails.jpg",'wb') { |f| f.write params[:file].read } File.open("ihatedetails.jpg",'wb') { |f| f.write params[:file].read }在一行中。