2012-08-24 76 views
4
temp_image = File.open(Rails.root.join("tmp","project_image.png"), 'wb') do |f| 
    f.write(Base64.decode64(image_data)) 
end 

puts temp_image 
puts File.open(Rails.root.join("tmp","project_image.png")) 

輸出:File.open回報整數文件不一致

<文件:0x007fddd55c8db0>

我想第一線返回該文件對象也是如此。爲什麼它返回整數?

回答

4

語句x = File.open(...) do |f| ...x設置爲do塊的結果,而不是返回的文件(塊在完成後關閉)。所以你實際上在做的是將temp_image設置爲f.write的結果,這是寫入的字節數,而不是文件對象。

+0

如果我將f添加到file.write之後的下一行,然後得到IOError(封閉流):是否有方法從語句中返回文件或不必再次調用File.open? – John

+1

不要在塊中使用File.open(...)。在塊中使用它將自動關閉塊末尾的文件。 – nneonneo