【问题标题】:PHP Response string as filePHP 响应字符串作为文件
【发布时间】:2016-03-31 17:00:19
【问题描述】:

在 php 中创建 pdf 作为字符串,如下所示:

%PDF-1.4
(..skipping...)
/F1 9 Tf
0 g 
BT
157 830 Td
(Lorem ) Tj
ET
(..skipping...)
8 0 obj 
<</Type /Font /Encoding /WinAnsiEncoding /Subtype /Type1 /BaseFont /Helvetica >>
endobj

我的php代码:

//string it's pdf as plain text
return new Response($string);

在 js 中我使用 ajax:

$("a#get_pdf").on('click', function(e){
    e.preventDefault();
    $.ajax('/get_pdf/');
});

我如何下载这个文件,因为我有纯文本的响应,不喜欢一个文件。

-----编辑-----

我可以这样做,就像在这个答案中一样: https://stackoverflow.com/a/34065784/4900669

-----编辑 2----

但经过一番搜索后,我编辑了我的 js 代码(https://stackoverflow.com/a/20830337/4900669):

$("a#get_pdf").on('click', function(e){
    e.preventDefault();
    $.ajax({
        url: '/get_pdf/',
        type: 'POST',
        success: function() {
            window.location = '/get_pdf/';
        }
    });
});

而且效果很好。

【问题讨论】:

    标签: php ajax symfony response


    【解决方案1】:

    首先我认为你不需要把它做成ajax,只要让浏览器在一个空白窗口中打开链接。

    然后您需要修复您的标头以使下载成为可能,参考:Symfony2 - Force file download

    这应该足以让它工作!希望对你有帮助

    【讨论】:

      【解决方案2】:

      Javascript 被明确禁止写入文件。您不能将 Ajax 调用与文件下载结合使用。

      您可以在当前文档中嵌入一个隐藏的 iframe,然后将该 iframe 指向内容,这将导致在浏览器中触发下载。例如

      $("a#get_pdf").on('click', function(e){
         e.preventDefault();
         document.getElementById('someHiddenDiv').innerHTML="<iframe src='/get_pdf/'></iframe>";
      }
      

      但您至少需要在包含 pdf 文件的响应的标头中设置 mimetype。

      【讨论】:

        猜你喜欢
        • 2016-04-05
        • 1970-01-01
        • 1970-01-01
        • 2011-02-26
        • 2016-05-21
        • 1970-01-01
        • 1970-01-01
        • 2018-08-16
        • 2011-08-11
        相关资源
        最近更新 更多