使用open()方法在rails中创建/重命名tempfile

时间:2015-03-09 20:32:27

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 carrierwave

我正在尝试创建一个临时文件,我正在从URL下载:例如,这个JPEG图像在URL中没有扩展名:

http://s7d9.scene7.com/is/image/jewelrymedia/Verragio14123_V_918_CU7

你可以看到它没有.jpg扩展名...所以我想将它保存为临时文件,但在保存之前将.jpg扩展名附加到它。这可能吗?或者如果那不可能,请在保存后重命名临时文件?

现在,我可以通过说明来创建临时文件 file = open("http://s7d9.scene7.com/is/image/jewelrymedia/Verragio14123_V_918_CU7")

哪个写临时文件......但这没有用,因为临时文件也没有扩展名

#<Tempfile:/var/folders/3m/t1v11gzj32n0fdbhwr823y600000gn/T/open-uri20150309-21935-qw7870>

1 个答案:

答案 0 :(得分:6)

如您所见[{3}},您无法指定通过open-uri下载的Tempfile的扩展名。

因此,只需创建带有.jpg扩展名的新Tempfile并将下载的文件写入其中:

require 'tempfile'
require 'open-uri'

input_file = open('http://s7d9.scene7.com/is/image/jewelrymedia/Verragio14123_V_918_CU7')

output_file = Tempfile.new(['output', '.jpg'])

output_file.binmode
output_file.write input_file.read
output_file.flush

output_file.seek(0)

p output_file.path
p output_file.size