PHP响应字符串作为文件


PHP Response string as file

在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/';
        }
    });
});

它的工作非常完美。

首先,我认为您不需要将其作为ajax,只需让浏览器在一个空白窗口中打开链接即可。

然后你需要修复你的头,使下载成为可能,参考:Symfony2-强制文件下载

这应该足以让它发挥作用!我希望它能帮助

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

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

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

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