由于一些奇怪的原因,我需要在服务器中保存一个文件(通常是直接下载的)。在我的情况下,我有一个用PDFKit创建的PDF文件,我需要保存。
# 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
如果我进入reports/1.pdf,我得到了我期待的报告,但我想把它保存在服务器上。
是否有一个可靠的方法来保存一个文件在服务器从响应?
在我得到实际答案之前只是一个快速的注意:看起来你正在传递一个完全合格的URL (report_url(@report)
)到PDFKit.new
,这是一种浪费——这意味着PDFKit必须向web服务器发出请求,而web服务器又需要通过Rails的路由器等来获取页面的内容。相反,您应该使用render_to_string
在控制器中呈现页面,并将其传递给PDFKit.new
,因为它将接受HTML字符串。记住这一点……
这在PDFKit的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