在Rails应用程序中,下载从刮擦生成的PDF文件

时间:2014-07-05 09:23:15

标签: ruby ruby-on-rails-3 pdf download

我在Ruby上做了以下代码:

  • 登录特定网站
  • 抓取链接
  • 下载PDF文件

由于代码经过测试并且工作正常,现在我想在Rails应用程序中使用它。当下载自动开始时,我将代码放入“下载”控制器(homepage.com/download)中,在控制器中添加此部分:

send_file file, :filename => my_pdf.pdf, :type => "application/pdf", :disposition => "attachment"

希望当用户点击链接“homepage.com/download”时,文件将被下载,但没有任何反应。

完整代码下方:

begin

agent = Mechanize.new
agent.pluggable_parser.pdf = Mechanize::File
page = agent.get("http://www.example.com")

#login
form = page.form_with(:id => 'form-login-page')
form.login = "my_mail"
form.password = "my_password"
page = form.submit


# parse the link
agent.get("http://www.example.com/").parser.xpath('//div/a').each do |link|


# download the file
File.open("/my_pdf.pdf", 'w+b') do |file|
file << page.body.strip

# the new part that I added on rails
send_file file, :filename => my_pdf.pdf, :type => "application/pdf", :disposition => "attachment"

end
end

代码有什么问题? 我是否必须在查看中添加内容?在我的路线

顺便说一句,我不确定这一部分:

File.open(“ /my_pdf.pdf ”,“w + b”)do | file |

在Rails应用程序中是正确的,因为在Ruby上,文件保存在应用程序的Public文件夹中,不确定它在ROR 3上的工作方式是否相同

1 个答案:

答案 0 :(得分:0)

如有需要,我找到答案:

如果文件保存在公共文件夹中,只需替换我代码的最后一部分

send_file file, :filename => my_pdf.pdf, :type => "application/pdf", :disposition => "attachment"

这一个

Rails.root.join('public', 'my_pdf.pdf')

该文件将被下载