从rails返回文件

初学者问题: 如何从rails中的控制器返回文件?

我熟悉返回/渲染JSON对象。 但是我从来没有返回/渲染过具有任意扩展名的文件。

从阅读SO来看,它听起来像render :nothing => true可以帮助。 我只是在寻找一些指导或相关文档。

您可以使用内置的rails send_file或send_data方法。

要流式传输文件(例如,为文件代理端点),请使用send_file:

 send_file("#{RAILS_ROOT}/path/to/file/on/server", :filename => "client-suggested-filename", :type => "mime/type") 

要流生成的数据(例如,生成的pdf),请使用send_data:

 send_data(your_data, :filename => "client-suggested-filename", :type => "mime/type") 

文件扩展名和mime类型不必匹配,但它们可能只是为了符合最终用户的期望。 例如,如果您使用mime类型的application/pdf发送,则应该将:filename设置为something.pdf

如果您不确定要发送的文件的mime类型是什么,您可以查看此维基百科页面或使用mime-types gem。 (或者如果您正在从存储mime类型的数据库中读取,请使用它)。