使用 AJAX 请求下载文件数据 - ruby​​ on rails 3

Posted

技术标签:

【中文标题】使用 AJAX 请求下载文件数据 - ruby​​ on rails 3【英文标题】:Download file data with AJAX request - ruby on rails 3 【发布时间】:2012-10-16 17:26:08 【问题描述】:

我最近了解到,我无法在 ruby​​ on rails 中使用单个 HTTP 请求下载超过 1 个文件,除非我使用 AJAX 请求。我现在正试图弄清楚如何做到这一点。

(我在 Ruby on RAils 3 上使用 Prawn 作为 PDF 创建器) 我的控制器中有一个操作可以呈现 PDF 并使用 send_data

def download_quote          
pdf = QuotesPdf.new(params)
send_data pdf.render, filename: "foo.pdf",
                    type: "application/pdf",
                    disposition: "download"
end

然后我的 html 视图中有一个按钮,其中包含此工作 Jscript 代码

// AJAX, download
function ajaxRequest()
    $.ajax(
      type: 'POST',
      url: '/download_quote/126',
      success: function(data)
        alert(data);
      
    );
    return false;
  

  $("#mydownload").click(ajaxRequest);

当我在渲染 PDF 几秒钟后单击“#mydownload”时,我会收到一个成功的警报框,里面包含所有 PDF 文件的内部数据。

问题是:如何将数据转换成pdf文件并自动下载?

【问题讨论】:

【参考方案1】:

我认为“下载”不是有效的内容处置类型。尝试改用“附件”。

Content Disposition

def download_quote          
    pdf = QuotesPdf.new(params)
    send_data pdf.render, filename: "foo.pdf",
        type: "application/pdf",
        disposition: "attachment"
end

【讨论】:

好吧,我会检查的!无论如何,到目前为止我一直使用下载没有错误......但这如何改变javascript方面? 我不太确定您要做什么,但我想指出下载不是有效的内容配置。它应该是内联或附件。您可以尝试这两种方法,看看它的行为是否有所不同。 Inline 将下载文件并立即尝试在浏览器中显示。附件将提示用户保存或打开。由于您正在进行 AJAX 调用,因此我不确定它们将如何发挥作用。 @RiccardoNeri 看到这个类似的问题:http://***.com/questions/1999607/download-and-open-pdf-file-using-ajax

以上是关于使用 AJAX 请求下载文件数据 - ruby​​ on rails 3的主要内容,如果未能解决你的问题,请参考以下文章

ruby和前端

ruby 通过Rails中的ajax / javascript文件下载

Ruby on Rails - AJAX 请求不起作用(跨域),尝试了一切

下载 csv 文件作为对 AJAX 请求的响应

使用Jquery Ajax请求 下载压缩文件

ajax实战:(ajax异步下载文件)请求二进制流进行处理