首页 > 解决方案 > 在新标签 Rails 中显示 base64 编码数据

问题描述

我收到一个 base64 格式的 PDF 文件。我想在新标签中显示它。我试过这个 -

这是我将数据发送回浏览器的控制器代码

send_data Base64.decode64(params[:base64_file]), :type => 'application/pdf', :filename => "#{params[:name]}.pdf", :disposition => "inline"

查看文件 :

<a href='<%= show_pdf_url({:pdf_body => pdf_body, :name => "download.pdf" %>' target='_blank'>

但它会引发“请求实体太大”错误。

试图将其更改为发布请求 -

<a href='#' class='pdf-download'/>

并调用 -

$('.pdf-download').on('click', function(event){
var get_all_admin = jQuery(this);
var w = window.open('about:blank');
w.document.body.appendChild(w.document.createElement('iframe')).src = 'data:application/octet-stream;base64,${get_all_admin.data("base64_file")}';

但它什么也不做,最终在新标签中加载相同的页面。

帮帮我,我被困在这里了。

标签: ruby-on-rails

解决方案


所以,我最终使用了这个——我没有尝试将它附加到新的 iFrame,而是将输出写入 iFrame。我真的希望我能够使用send_data-

   $(document).on('click', '.pdf-download', function(event){
    var get_all_admin = jQuery(this);
    event.preventDefault();

    let pdfWindow = window.open("")
    pdfWindow.document.write("<iframe style='position: fixed; top: 0; left: 0;' width='100%' height='100%' src='data:application/pdf;base64, " + encodeURI(get_all_admin.data("base64_file"))+"'></iframe>")
  });

get_all_admin 在哪里获取我在我的网址中设置的数据,如下所示 -

<a href='#' data-base64_file='<%=mydoc.body%>' data-name='<%= get_pdf_name(mydoc.id, mydoc.invoice_date) %>' target='_blank' class='pdf-download' >

这里 mydoc 是我在其中获取 Base64 格式的 pdf 文件的输出。


推荐阅读