由于某些奇怪的原因,我需要在服务器中保存文件(通常直接下载)。在我的情况下,我有一个PDF文件用PDFKit创建,我需要保留。
# app/controllers/reports_controller.rb
def show
@report = Report.find(params[:id])
respond_to do |format|
format.pdf { render :text => PDFKit.new(report_url(@report)).to_pdf }
end
end
如果我去报告/ 1.pdf我得到了我期待的报告,但我想把它保存在服务器中。
是否有一种Raily的方式来保存服务器中的文件以响应?
答案 0 :(得分:2)
在我得到实际答案之前,请快速注意:看起来您将完全限定的网址report_url(@report)
)传递给PDFKit.new
,这是一种浪费 - 这意味着PDFKit必须向Web服务器发出请求,而Web服务器又需要通过Rails的路由器等等,以获取页面内容。相反,您应该使用render_to_string
在控制器中呈现页面并将其传递给PDFKit.new
,因为它将接受HTML字符串。牢记这一点......
PDFKit's README的“使用情况”部分对此进行了介绍。你会做这样的事情:
def show
@report = Report.find(params[:id])
kit = PDFKit.new render_to_string(@report) # pass any options that the
pdf_file = kit.to_file '/some/file/path.pdf' # renderer needs here (same
# options as `render`).
# and if you still want to send it to the browser...
respond_to do |format|
format.pdf { render :file => pdf_file.path }
end
end