Ruby on rails rails 3.1:为什么不重定向到启动文件下载?

Ruby on rails rails 3.1:为什么不重定向到启动文件下载?,ruby-on-rails,pdf,download,Ruby On Rails,Pdf,Download,我在远程服务器Apache+Tomcat上有一些不同于Rails应用程序所在服务器的PDF文件。我希望用户能够在单击“另存为”对话框上的“确定”后下载它们 因此,在我的控制器中,我有一个处理下载请求的操作。此操作只是将_重定向到 PDF的URL。问题是“另存为”对话框无法打开 def download url = "#{server}/...../file.pdf" redirect_to url end 但是,如果我要获取PDF的完全限定URL并将其插入浏览器的地址栏中,则会出现所

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

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

def download
  url = "#{server}/...../file.pdf"
  redirect_to url
end 
但是,如果我要获取PDF的完全限定URL并将其插入浏览器的地址栏中,则会出现所需的行为

这两个请求之间显然存在差异。例如,我没有设置内容配置或内容类型,因为我不知道如何设置。或者,将你的注意力转向是一个错误的方向

所以我希望这里的人能帮助我理解为什么:

显然,使用重定向到的解决方案不起作用 为什么1可能不是首选选项,而像send_file这样的选项更经常被建议。 如果使用send_file,那么在调用send_file之前,我需要先将该文件带到Rails服务器。我该怎么做? 这项工作:

  def sendfile(path)
    headers["Location"] = path
    redirect_to(path)         
  end
这项工作:

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

试一试

将Content Disposition标头设置为attachment,其中包含希望用户下载文件的文件名。像这样的

Content-Disposition: attachment; filename="fname.ext"
将Content Disposition标头设置为attachment,其中包含希望用户下载文件的文件名。像这样的

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

那么它现在做什么呢?只需在浏览器中打开pdf?可能是Varatis的副本->据我所知,没有发生什么。我被重定向到并完成了126ms消息中的302,但没有“另存为”对话框。Firebug中的响应头的位置设置为正确的URL。但是内容类型是text/html,我想应该是application/pdf。设置标题[内容类型]会有帮助吗?无论如何,我不知道这两个调用的区别在哪里——从Rails应用程序重定向到和从浏览器直接调用——liesSo什么——它现在做了什么?只需在浏览器中打开pdf?可能是Varatis的副本->据我所知,没有发生什么。我被重定向到并完成了126ms消息中的302,但没有“另存为”对话框。Firebug中的响应头的位置设置为正确的URL。但是内容类型是text/html,我想应该是application/pdf。设置标题[内容类型]会有帮助吗?无论如何,我不知道这两个调用之间的区别在哪里-从Rails应用程序重定向到和从浏览器直接调用-liesReed->如果我在Firebug中看到响应头,那么位置设置为正确的URL。在这种情况下,是否有必要进行上述工作?另一方面,内容类型是“text/html”——这显然是错误的。如果我在Firebug中看到响应头,那么位置设置为正确的URL。在这种情况下,是否有必要进行上述工作?另一方面,内容类型是“text/html”——这显然是错误的。这不应该是一个改变吗?