Ruby Tempfile与File的区别

3

我想了解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个回答

5
在第一种情况下,您正在从文件系统加载文件。这将创建一个File对象,使用文件名称(它有一个)。
在第二种情况下,您正在打开指向远程文件的流。在您的文件系统上没有关联的文件,但如果您想对其进行任何操作,则需要一个文件。因此,Ruby为您创建一个具有唯一文件名的Tempfile(因为该资源本身没有名称,因此您甚至不需要知道)。然后它的行为就像一个File对象。

谢谢您的回答,但我该如何使Tempfile与File相同,也就是流编码。我发现File流编码为ASCII-8BIT,但TempFile流编码不是ASCII-8BIT,我可以成功地将文件流上传到第三方存储服务器,但TempFile失败了,我被告知数据格式不正确,我该怎么办?谢谢! - HXH

0

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


我的需求是将远程文件上传到云存储服务器,但当我上传流web_contents = open('http://q.qlogo.cn/www.jpg') {|f| f.read}时,我得到了一个400 Bad Request的错误,但当流为web_contents = params[:upfile]时,就可以了!为什么?谢谢。 - HXH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接