And*_*ton 5 ruby api rest ruby-on-rails wicked-pdf
我在 ruby on rails 应用程序中设置了一个 rest API,我现在需要生成一个 PDF 并从 get 请求中返回这个 PDF。我正在寻找有关如何实现此功能的一些建议。
我的一些要求如下: 我无法保存文件并向最终用户提供文件链接,因为文件中的数据可以随时更新。我将该应用程序用作微服务,因此没有可用于显示文件的前端。
所以这是我的想法,我希望能得到一些有关如何实现此功能的建议。
我想向应用程序中的特定端点发出获取请求。我希望返回一个 PDF 文件,然后我可以将其显示给最终用户。
我目前正在使用 WickedPdf gem 来生成一个临时的 PDF 文件,但我真的在为响应的外观而苦苦挣扎。
任何建议将不胜感激。
一种方法是在内存中创建一个 PDF 文件并将其流式传输到客户端。我更喜欢这种方式,也许以后您将不得不通过电子邮件发送 PDF 文件,或者只是将它们保存到某个备份磁盘等...
def get_pdf
pdf = WickedPdf.new.pdf_from_string('<h1>Hello There!</h1>')
send_data pdf, filename: 'file_name.pdf'
end
Run Code Online (Sandbox Code Playgroud)
您可以将 PDF 生成放到不同的服务中,然后在控制器中调用它。这提供了隔离,您可以单独测试它。
您也可以使用HTTPie调试端点响应 http get http://localhost:3000/invoices/1/get_pdf
Rails 将设置所有必需的 HTTP 响应标头:
Content-Disposition: attachment; filename="file_name.pdf"
Content-Length: 5995
Content-Transfer-Encoding: binary
Content-Type: application/pdf
Run Code Online (Sandbox Code Playgroud)
因此,当用户单击指向端点的链接时,很可能会因为Content-Disposition: attachment;
标题而弹出下载对话框
其他解决方案是将 get_pdf.html 呈现为 PDF 并发送回客户端:
def get_pdf
render pdf: "file_name"
end
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,Content-Disposition
标题将是inline
,这意味着浏览器将打开 pdf(如果它可以读取 PDF 格式)而不是提供下载它。
归档时间: |
|
查看次数: |
15522 次 |
最近记录: |