【问题标题】:How to write an image to filesystem in rails 3.1.1?如何在 rails 3.1.1 中将图像写入文件系统?
【发布时间】:2012-06-08 04:05:16
【问题描述】:

我觉得我应该非常接近,但我无法让它完全正常工作。

我正在使用文件传输将图像从我的 phonegap 应用程序发送到我的 rails 应用程序(3.1.1 ruby​​ 1.8.7 btw)。

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

这是参数哈希:

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,但是这些命令应该是一样的...

所以我现在被难住了。

【问题讨论】:

  • 试试File.open('image.jpg', 'wb') { |f| f.write params[:file].read }
  • 不幸的是,这不起作用。我将在上面的编辑中解释更多。
  • @NeoAkaPavan..你应该删除循环内的File.open()。看我的回答。
  • 我应该添加的。我试过了,还是不行。
  • @NeoAkaPavan...您在执行该代码时遇到的错误是什么?

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


【解决方案1】:

代码应该是:

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

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

【讨论】:

  • 可以补充一下,这是因为ActionDispatch::Http::UploadedFile(即params[:file]的内容已经代表了一个已经“打开”的文件,因此无需再次打开它。跨度>
  • 对不起,我不知道发生了什么,但它现在可以正常工作了。我想我在其他地方出错了。对于那个很抱歉。感谢您的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多