首页 > 解决方案 > 如何使用具有不同扩展名的 send_file 更新新创建的文件中的内容?

问题描述

我正在处理需要更改文件扩展名并下载扩展名已更改的文件的项目。我用下面的代码做了。

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

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

标签: ruby-on-railsruby

解决方案


send_file不写入文件本身。相反,它将文件名传递回 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')

推荐阅读