【发布时间】:2012-03-30 09:48:07
【问题描述】:
在 Ruby 中,当您使用 open-uri 打开远程文件时,文件对象最终会具有类似以下内容的路径:/tmp/20120329-2113-1-0762/open-uri20120329-1-7dit2c。我有一些文件处理取决于存在的文件的扩展名。使用 open-uri 时,有没有办法保留扩展甚至强制它?
这是一个简短的交互,显示了当您使用 open-uri 打开远程文件并获取它的路径时会发生什么。该路径看起来与远程 URL 完全不同,因为它是为该对象生成的临时唯一文件,但问题是缺少扩展名:
> require "open-uri"
=> true
> f = open("http://cdn.sstatic.net/stackoverflow/img/sprites.png")
=> #<File:/var/folders/zq/vx2std7x5qj54xc1g4hpm14h0000gn/T/open-uri20120401-38087-13mm6zy>
> f.path
=> "/var/folders/zq/vx2std7x5qj54xc1g4hpm14h0000gn/T/open-uri20120401-38087-13mm6zy"
【问题讨论】:
-
你需要展示一些代码。 Open-URI 是管道,不负责保存文件,您的代码是。
-
@theTinMan open-uri 下载并保存文件,然后打开它供您使用。该文件的扩展名错误。我会发布一些代码来证明这一点。
-
它把它保存为一个临时缓冲区,它不是供你用作最终文件的。
read你从open得到的文件句柄并将它保存在你想要的地方。 -
@theTinMan 我没有尝试以任何其他方式使用该文件,而是尝试读取它,但我希望临时缓冲区返回具有正确扩展名的路径。然后我就可以使用它,而不必写下来,打开它,使用它,关闭它,删除它。
-
可能是这样,但是您的使用会破坏临时文件的用途。它不是供你使用的,它是供 Open::URI 使用的。很多东西在现代操作系统上创建临时文件,但它们被理解为仅用于创建它的例程。不支持尝试使用临时文件,您自行承担风险,因为位置和/或文件格式可能会在没有警告的情况下更改。