从rails返回文件

Sun*_*day 5 ruby-on-rails file

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

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

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

Ben*_*Lee 14

您可以使用内置的rails send_filesend_data方法.

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

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

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

send_data(your_data,
  :filename => "client-suggested-filename",
  :type => "mime/type")
Run Code Online (Sandbox Code Playgroud)

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

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