PHP REST download file

前端 未结 2 1081
[愿得一人]
[愿得一人] 2021-01-05 06:55

I have a webservice with a function like this

$app->get(\'/downloadPdf\', function () use($app) 
{
    $log = \'example.pdf\';
    $res = $app->respons         


        
相关标签:
2条回答
  • 2021-01-05 07:31

    Never got an answer .. so !!!

    This is how i made it work....

    Service Function can be seen below

    $app->post('/downloadReport', 'authenticate', function() use ($app) 
    {
    verifyRequiredParams(array('reportId'));
    
    $body = $app->request()->getBody();
    $params_str = urldecode($body);     
    $input = json_decode($params_str,true);             
    
    $report_id = $input['reportId'];    
    $db = new DbHandler();    
    $db->getReport($report_id);
    
    $path = $db->getReportPdfPath($report_id);
    
    $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);   
    
    });
    

    Called the function like this:

    public function downloadReport($api_key,$id)
    {
    
        $curl_post_data = array('reportId' => $id);
    
        $headers = array('Content-type: application/json','Authorization: '.$api_key,);
        $fp = fopen (dirname(__FILE__) . '/localfile.tmp', 'w+');//This is the file where we save the    information
        $curl = curl_init(DONWLOAD_REPORT);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($curl_post_data));
        curl_setopt($curl, CURLOPT_USERPWD, $api_key);
        $file = curl_exec($curl);
    
        if ($file === false) 
        {
            $info = curl_getinfo($curl);
            curl_close($curl);
            die('error occured during curl exec. Additioanl info: ' . var_export($info));
        }
    
        curl_close($curl);
    
        header('Content-type: ' . 'application/octet-stream');
        header('Content-Disposition: ' . 'attachment; filename=report.pdf');
        echo $file;        
    }
    
    0 讨论(0)
  • 2021-01-05 07:46

    I have same problem with you, I am using this code, and it works, return a pdf file from webservice.

            $api = new RestClient(array(
                    'base_url' => 'http://another-webservice.com/', 
                    'headers' => array(
                                    'X-Token'  => $res->headers->x_token,
                                    'Accept'  => 'application/pdf',
                                 ),
                ));
    
            $result = $api->execute("reports/report",'GET', $params);
    
            $filename = 'Report.pdf';
            header('Content-type: application/pdf');
            header('Content-Disposition: inline; filename="' . $filename . '"');
            header('Content-Transfer-Encoding: binary');
            header('Accept-Ranges: bytes');
            echo $result->response;
    

    References: How to display PDF in Browser

    0 讨论(0)
提交回复
热议问题