下载pdf文件slim php

时间:2015-10-20 11:24:47

标签: php rest pdf download slim

我有以下服务下载pdf文件:

$app->options('/docDownload',function(){}); // This one just so you can accept OPTIONS
$app->get('/docDownload', function () use ($app){

    $path = "working.pdf";
    $res = $app->response();
    $res['Content-Description'] = 'File Transfer';
    $res['Content-Type'] = 'application/octet-stream';
    $res['Content-Disposition'] ='attachment; filename=' . basename($path);
    $res['Content-Transfer-Encoding'] = 'binary';
    $res['Expires'] = '0';
    $res['Cache-Control'] = 'must-revalidate';
    $res['Pragma'] = 'public';
    $res['Content-Length'] = filesize($path);
    readfile($path);
});

然而,当我运行该服务时,我收到了以下回复:

%PDF-1.5
     

%   1 0 obj   &LT;&GT;&GT;&GT;   endobj   2 0 obj   &LT;&GT;   endobj   3 0 obj   &LT;&GT; / ExtGState&LT;&GT; / ProcSet [/ PDF   / Text / ImageB / ImageC / ImageI]&gt;&gt; / MediaBox [0 0 595.32 841.92] / Contents 4 0 R / Group&lt;&gt; / Tabs / S / StructParents 0&gt;&gt;   endobj   4 0 obj   &LT;&GT;   流   xKk09J |�� �@����J�C M!��$��bA,�ш]T�h�j��V0]���r���0��8R0L.F����70�3�}�8\�08L�V�Q��+�')��g��U;��V ��8�o�����o��Ip�I}�W_�r}��N'mգU��g>Ö�Ӎ���n>�D��.�-����<H ABC \ǐ'=ٻXwczwx   endstream   endobj   5 0 obj   &LT;&GT;   endobj   6 0 obj   &LT;&GT;   endobj   7 0 obj   &LT;&GT;   endobj   8 0 obj   .....

要打开pdf,我需要点击响应链​​接上的第二个鼠标按钮:

WS url

并选择在新标签页中打开以打开pdf文件,看起来您正在运行该服务两次以获取pdf文件一次。

我想自动打开每个WS请求的pdf文件。

这意味着每次请求WS时,都应返回在屏幕中直接打开的pdf文件。

有人可以帮我修理吗?

韩国社交协会

2 个答案:

答案 0 :(得分:0)

也许你需要使用正确的MIME类型,试试这个

$res['Content-Type'] = 'application/pdf';

答案 1 :(得分:0)

解决方案可能是不使用AJAX调用下载文件(似乎您正在使用这种方式)。 这就是您的页面下载页面的方式:

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
var PDF_DOWNLOAD_URL = "{{ urlFor('PDFDownload') }}";
$(function(){
    //Your old way
    $("button.download-file").click(function(){
        $.ajax({
            method: "GET",
            url: PDF_DOWNLOAD_URL,
            headers: { 'x-my-custom-header': 'some value' },
            success: function(data){
                console.log("Data received:", data);
            }
        });
    });

});
</script>
</head>
<body>

<button type="button" class="download-file">Download the document</button>

</body>
</html>

您的路线应以这种方式定义名称:

$app->get('/docDownload', function () use ($app){
    $path = "working.pdf";
    $res = $app->response();
    $res['Content-Description'] = 'File Transfer';
    $res['Content-Type'] = 'application/json';
    $res['Content-Transfer-Encoding'] = 'binary';
    $res['Expires'] = '0';
    $res['Cache-Control'] = 'must-revalidate';
    $res['Pragma'] = 'public';
    $fileData = file_get_contents($path);
    $base64 = base64_encode($fileData);
    $response = array();
    $response['pdf'] = $base64;
    $response['customKey'] = "My Custom Value";
    echo json_encode($response);
})->name("PDFDownload");