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

时间:2012-06-08 04:05:16

标签: ruby ruby-on-rails-3 ruby-on-rails-3.1

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

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

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

这是params哈希:

Parameters: {"file"=>#<ActionDispatch::Http::UploadedFile:0x7f1e2baa94e8 @tempfile=#<File:/tmp/RackMultipart20120607-5707-owzii5-0>, 
@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,但这些命令应该是相同的......

所以我现在很难过。

1 个答案:

答案 0 :(得分:2)

代码应为:

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

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