Search code examples
phplaravellaravel-4laravel-routing

Download files in laravel using Response::download


In the Laravel application, I'm trying to achieve a button inside the view that can allow users to download files without navigating to any other view or route Now I have two issues: (1) below function throwing

The file "/public/download/info.pdf" does not exist

(2) The Download button should not navigate the user anywhere and rather just download files on the same view, My current settings, route a view to '/download'

Here is what I am trying to achieve:

Button:

  <a href="/download" class="btn btn-large pull-right"><i class="icon-download-alt"> </i> Download Brochure </a>

Route :

Route::get('/download', 'HomeController@getDownload');

Controller :

public function getDownload(){
        //PDF file is stored under project/public/download/info.pdf
        $file="./download/info.pdf";
        return Response::download($file);
}

Solution

  • Try this.

    public function getDownload()
    {
        //PDF file is stored under project/public/download/info.pdf
        $file= public_path(). "/download/info.pdf";
    
        $headers = array(
                  'Content-Type: application/pdf',
                );
    
        return Response::download($file, 'filename.pdf', $headers);
    }
    

    "./download/info.pdf"will not work as you have to give full physical path.

    Update 20/05/2016

    Laravel 5, 5.1, 5.2 or 5.* users can use the following method instead of Response facade. However, my previous answer will work for both Laravel 4 or 5. (the $header array structure change to associative array =>- the colon after 'Content-Type' was deleted - if we don't do those changes then headers will be added in wrong way: the name of header wil be number started from 0,1,...)

    $headers = [
                  'Content-Type' => 'application/pdf',
               ];
    
    return response()->download($file, 'filename.pdf', $headers);