在所有的控制器中都可以使用 send_data 和 send_file 方法,把文件发送给用户。这两个方法都会以数据流的方式发送数据。
1.send_data
先引入:prawn gem 'prawn'
,利用prawn生成了pdf后,再进行数据发送
- controller
def download_pdf
user = User.find(params[:id])
send_data generate_pdf(user),
filename: "#{user.username}.pdf",
type: "application/pdf"
end
private
def generate_pdf(user)
Prawn::Document.new do
text user.username, align: :center
text "password: #{user.password}"
end.render
end
- view
<%= link_to '下载个人信息', download_pdf_user_path(current_user), method: "get" %>
- routes
resources :users do
member do
get :download_pdf
end
2.send_file
send_file只要提供磁盘中文件的名称,就会用数据流发送文件内容。
项目目录/files/users下引入 1.pdf文件
- controller
def download_exist_pdf
user = User.find(params[:id])
send_file("#{Rails.root}/files/users/#{user.id}.pdf",
filename: "#{user.username}.send.pdf",
type: "application/pdf")
end
- view
<%= link_to '下载磁盘中已经存在的文件', download_exist_pdf_user_path(current_user), method: "get" %>
- routes
resources :users do
member do
get :download_exist_pdf
end