我在云端保存了pdf文件附件。该文件使用attachment_fu附加。我在视图中显示的所有内容是:
<%= image_tag @model.pdf_attachment.public_filename %>
当我在浏览器中加载包含此代码的页面时,它会执行我想要的操作:它显示附加的pdf文件。
但仅限于Mac。
在Windows上,浏览器将显示损坏的图像占位符。 Chrome的开发者工具报告:“资源被解释为图像,但使用MIME类型application / pdf进行传输。”
我也试过从控制器发送文件:
PdfAttachmentsController中的:
def send_pdf_attachment
pdf_attachment = PdfAttachment.find params[:id]
send_file pdf_attachment.public_filename,
:type => pdf_attachment.content_type,
:file_name => pdf_attachment.filename,
:disposition => 'inline'
end
在routes.rb中:
map.send_pdf_attachment '/pdf_attachments/send_pdf_attachment/:id',
:controller => 'pdf_attachments',
:action => 'send_pdf_attachment'
并在视图中:
<%= send_pdf_attachment_path @model.pdf_attachment %>
or
<%= image_tag( send_pdf_attachment_path @model.pdf_attachment ) %>
并且这不会在Mac上显示该文件(我没有尝试在Windows上),它会显示路径:
pdf_attachments/send_pdf_attachment/35
如何正确显示内联的pdf文件?
答案 0 :(得分:3)
您是否尝试使用简单的<iframe>
代码?
这对我有用:
在视图(show.hmtl.erb)
中<iframe src=<%= @certificate.certificate_pdf %> width="600" height="780" style="border: none;"> </iframe>
只需调用带有嵌入式ruby的文件作为'iframe'标记的来源,经过数小时的搜索后,我就可以使用它。 'certificate'是我的模型,'certificate_pdf'是我的附件文件。我测试了它并适用于Mac(Safari,FF,Chrome)和Windows(IE10,FF,Chrome)
答案 1 :(得分:2)
您无法发送本地计算机上没有的文件。如果要将文件发送到其内容存在于另一台服务器上的Web客户端,则首先需要获取文件的内容,然后在将该文件下载到本地文件后对其进行流式传输。
ie ...向(远程)服务器发出HTTP get请求,然后将其内容保存在文件对象中,然后发送send_file THAT。
答案 2 :(得分:1)
您是否尝试过停用该文件的流媒体?
send_file pdf_attachment.public_filename,
:type => pdf_attachment.content_type,
:file_name => pdf_attachment.filename,
:disposition => 'inline',
:stream => false
另外请确保文件没有损坏,如果您将配置更改为附件并下载它仍然可以打开,如果你制作md5-hash,它是否与原始相同?
答案 3 :(得分:1)
我的猜测是它没有显示,因为你试图在图片标签中显示pdf。这不是一个图像,它是一个pdf 要么在iframe中显示,要么将其放在一个链接中,该链接仅使用send_file和内联处置显示pdf。
我使用princely插件创建pdf,并使用此方法显示内联。
答案 4 :(得分:0)
您是否已尝试通过编写:type => ‘application/pdf’
来明确设置类型?
当文件从云端提供时,它由你的其他网络服务器提供服务 - 也许他们发送的是Mime Type“application / octet-stream”,而不是pdf?