如何使用具有不同扩展名的send_file更新新创建的文件中的内容?

时间:2019-02-12 17:04:44

标签: ruby-on-rails ruby

我正在从事需要更改文件扩展名并下载具有更改扩展名的文件的项目。我使用以下代码。

send_file('x.foo', filename: 'y.bar')

实际文件为x.foo,我创建了y.bar文件,扩展名不同。现在,我想在运行时更新y.bar中的内容,然后下载具有不同扩展名和更新内容的文件。我怎样才能做到这一点???

1 个答案:

答案 0 :(得分:1)

send_file不会写文件本身。而是将文件名传递回Web服务器,然后由Web服务器执行实际的写入操作(因此,Rails应用程序的负载较小)。

为了实现您的目标,您可以读取文件,在内存中应用更改,然后使用send_data将数据写入客户端:

buffer = File.read('x.foo')
buffer = apply_changes(buffer)
send_data(buffer, filename: 'y.bar')

或者您可以将更改写入新文件并利用send_file

unless File.exist?('y.bar')
  buffer = File.read('x.foo')
  buffer = apply_changes(buffer)
  File.write('y.bar', buffer)
end
send_file('y.bar')