Ruby Tempfile vs File

时间:2014-08-17 09:16:02

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

我想知道TempfileFile之间的区别。

我发现:

require 'open-uri'

open('c:/boot.ini'){|file|
  puts file.class  #File 
}

open('http://coderlee.cnblogs.com'){|file|
  puts file.class #Tempfile
}

当我将流保存到远程存储服务器时,Tempfile会导致错误,似乎原因是编码不是ASCII-8BIT为什么?

2 个答案:

答案 0 :(得分:3)

在第一种情况下,您正在从文件系统加载文件。这将使用文件名创建一个File对象(它有一个)。

在第二种情况下,您正在向远程文件打开流。文件系统上没有关联文件,但如果要对其进行任何操作,则需要一个文件。因此,Ruby为您创建了一个Tempfile,其中包含您甚至不需要知道的唯一文件名(因为资源本身没有名称)。然后它的行为与File对象完全相同。

答案 1 :(得分:0)

您检索到的文档的编码由服务器控制。如果要以不同的编码检索文档,则需要更改服务器上的编码。