从控制器操作强制下载公共目录中的文件?

时间:2009-10-09 15:15:42

标签: ruby-on-rails header

我做到了这一点:

<% response.headers['Content-Disposition'] = "attachment; 
        filename=somefile.txt" -%>

I am a text file!

我想强制下载我的公共文件夹中的文件而不显示路径,所以我有一个控制器而不是检查一些参数来知道我的文件的位置(在我的公共文件夹中)然后我我想强行下载:

<% response.headers['Content-Disposition'] = "attachment; 
        filename=#{@invoice.file_name}" %>

How do I get the file content to be here rather than this text?

有办法吗?

2 个答案:

答案 0 :(得分:5)

我认为send_file会做你想要的。

send_file '/path/to.file', :type => 'text/plain', :disposition => 'inline'

答案 1 :(得分:3)

定义标题不是视图的工作。在控制器中执行它会更清晰。 实际上,您不需要任何html视图来呈现那种文件。

做这样的事情会更合适:

def action
    response.headers['Content-Disposition'] = 'attachment; filename=somefile.txt'
    return render(:text => File.read('/path/to/your/file.txt')
end

你保持你的东西干净(你的视图中没有工作代码)并适当强制下载你的文件。