How to create download link in Laravel

You do not need any route or controller.Just give it to anchor tag.

 <a href="{{URL::to('/')}}/file/example.png" target="_blank">
     <button class="btn"><i class="fa fa-download"></i> Download File</button>
 </a>

Updating answer for Laravel 5.0 and above:

<a href={{ asset('file/thing.png') }}>Thing</a>

Take a look at the Laravel Helpers documentation: http://laravel.com/docs/4.2/helpers

If you want a link to your asset, you can do it like this:

$download_link = link_to_asset('file/example.png');

Edit

If the above method does not work for you, then you can implement a fairly simple Download route in app/routes.php which looks like this:

Note this example assumes your files are located in app/storage/file/ location

// Download Route
Route::get('download/{filename}', function($filename)
{
    // Check if file exists in app/storage/file folder
    $file_path = storage_path() .'/file/'. $filename;
    if (file_exists($file_path))
    {
        // Send Download
        return Response::download($file_path, $filename, [
            'Content-Length: '. filesize($file_path)
        ]);
    }
    else
    {
        // Error
        exit('Requested file does not exist on our server!');
    }
})
->where('filename', '[A-Za-z0-9\-\_\.]+');

Usage: http://your-domain.com/download/example.png

This will look for a file in: app/storage/file/example.png (if it exists, send the file to browser/client, else it will show error message).

P.S. '[A-Za-z0-9\-\_\.]+ this regular expression ensures user can only request files with name containing A-Z or a-z (letters), 0-9 (numbers), - or _ or . (symbols). Everything else is discarded/ignored. This is a safety / security measure....