我想知道Tempfile
和File
之间的区别。
我发现:
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
为什么?
答案 0 :(得分:3)
在第一种情况下,您正在从文件系统加载文件。这将使用文件名创建一个File对象(它有一个)。
在第二种情况下,您正在向远程文件打开流。文件系统上没有关联文件,但如果要对其进行任何操作,则需要一个文件。因此,Ruby为您创建了一个Tempfile,其中包含您甚至不需要知道的唯一文件名(因为资源本身没有名称)。然后它的行为与File对象完全相同。
答案 1 :(得分:0)
您检索到的文档的编码由服务器控制。如果要以不同的编码检索文档,则需要更改服务器上的编码。