ruby-on-rails - 使用 open() 方法在 Rails 中创建/重命名临时文件

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

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

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>

最佳答案

如你所见here您不能为通过 open-uri 下载的 Tempfile 指定扩展名。

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

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

关于ruby-on-rails - 使用 open() 方法在 Rails 中创建/重命名临时文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28951209/

相关文章:

mysql - 遍历 Array 并在 ruby​​ 中使用变量

ruby-on-rails - 数组上的 rails where() sql 查询

ruby-on-rails - Ruby On Rails 回调在 Heroku 上不起作用,但在本地工作

ruby-on-rails - 如何将 routes.rb 拆分成更小的文件

ruby-on-rails - Rails 表单仅在日期时间选择字段中显示 future 日期

ruby-on-rails - PostgreSQL gem for rails 不会安装,即使同时安装了 home brew 和 app

ruby-on-rails - Capistrano 和 Assets :precompile not working due to rake versioning issue

ruby-on-rails - 如何更改 Rails 3.x 迁移中新列的位置

jquery - Rails 3 应用程序中的远程表单以 html 形式提交

ruby - bundle 安装从错误的目录运行