rails 3.1:为什么不是redirect_to启动文件下载?

时间:2012-02-02 14:48:07

标签: ruby-on-rails pdf download

我在远程服务器(Apache + Tomcat)上有一些不同于Rails应用程序的PDF文件。我希望用户能够在“另存为”对话框中单击“确定”后下载它们

因此,在我的控制器中,我有一个处理下载请求的操作。这个动作只是redirects_to PDF的URL。问题是“另存为”对话框无法打开

def download
  url = "#{server}/...../file.pdf"
  redirect_to url
end 

但是,如果我要获取PDF的完全限定URL并将其插入浏览器的地址栏,则会发生所需的行为

这两个请求之间显然存在差异。我没有 - 因为我不知道如何 - 例如设置Content-disposition或Content-type。或许,redirect_to只是错误的方式

所以我希望有人能帮我理解原因:

  1. “明显”的解决方案 - 使用redirect_to - 无法正常工作
  2. 为什么(1)可能不是首选选项,而像send_file这样的选项更常被建议。
  3. 如果send_file是要走的路,那么在调用send_file之前我需要先将文件带到我的Rails服务器。我该怎么办?

3 个答案:

答案 0 :(得分:0)

尝试

def download
  url = "#{server}/...../file.pdf"
  send_file url, :type=>"application/pdf"
end

答案 1 :(得分:0)

Content-Disposition标题设置为附件,其中包含您希望用户下载文件的文件名。像这样......

Content-Disposition: attachment; filename="fname.ext"

答案 2 :(得分:-1)

这有效:

  def sendfile(path)
    headers["Location"] = path
    redirect_to(path)         
  end