作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
由于某些奇怪的原因,我需要在服务器中保存一个文件(通常是直接下载的)。在我的例子中,我有一个用 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,我会得到我期望的报告,但我想将它保存在服务器中。
有没有一种 Raily 方法可以通过响应将文件保存在服务器中?
最佳答案
在我得到实际答案之前,请快速注意一下:您似乎正在将完全限定的 URL (report_url(@report)
) 传递给 PDFKit.new
,这是一种浪费——这意味着 PDFKit 必须向 web 服务器发出请求,而 web 服务器又需要通过 Rails 的路由器等来获取页面内容。相反,您应该只使用 render_to_string
在 Controller 中呈现页面并将其传递给 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
关于ruby-on-rails - rails : How to create a file from a controller and save it in the server?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7588358/
我是一名优秀的程序员,十分优秀!