在新标签Rails中显示base64编码的数据

时间:2019-04-15 11:15:16

标签: ruby-on-rails

我正在接收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")}';

但是它什么也没做,最终在新标签页中加载了同一页面。

帮帮我,我被困在这里。

1 个答案:

答案 0 :(得分:0)

所以,我最终使用了这个- 我没有尝试将其附加到新的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在哪里获取我在URL中设置的数据,就像这样-

<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文件的输出。