我想将生成的PDF保存为活动存储附件。
pdf = WickedPdf.new.pdf_from_string(
render_to_string(pdf: 'SurveyReportForm', template: '/screenings/test', layout: 'pdf', formats: :pdf)
)
@screening.report.attach(
io: StringIO.new(pdf),
filename: "#{@screening.id}-report",
content_type: 'application/pdf'
)
代码运行时没有错误。然而,当我点击链接查看pdf
<%= link_to "Download Report", rails_blob_path(@screening.report, disposition: "attachment") %>
我得到一个PDF,页面上有看起来像PDF二进制/源代码的东西,开始是:
%PDF-1.4 1 0 obj << /Title (þÿ) /Creator (þÿwkhtmltopdf 0.12.6) /Producer (þÿQt 4.8.7...
到底出了什么问题?如果问题出在pdf生成中,或者我是如何保存它的,我该如何调试它来解决这个问题?
1条答案
按热度按时间fkaflof61#
问题不在于ActiveStorage,而在于下载的PDF没有使用正确的Mime类型。因为您没有指定它,所以它将作为
text/plain
而不是application/pdf
提供。我想你可以通过注册一个PDF Mime类型来改变这一点,就像WickedPDF README告诉你的那样:
这应该能让Rails知道在提供PDF时,要使用该mime类型。
否则,您可以创建一个控制器端点来下载PDF,如下所示: