I've setup my system so each new record created also creates a folder within the storage folder to save related documents such as PDF's.
e.g. app/storage/records/123456/document.pdf
I have the following in my controller:
$files = File::allFiles(app_path().'/storage/records/'.$record->id);
I can then show the path to the documents in the specific folder in my record view with the following:
@foreach($files as $file)
<div>{{ HTML::link($file, basename($file)) }}</div>
@endforeach
But when I click on the link it appends the app path on to the end of the URL and obviously returns a 404.
How can I set this up to trigger a HTTP download when I click the link?
You will need to create a route to retrieve your file and send it with the appropriate download headers. In Laravel 5, its simplest form is:
// routes.php
Route::get('downloads/{record_id}/{filename}', function ($record_id, $filename)
{
$headers = [
// set whatever extra download headers you want here...
];
return response()->download(app_path().'/storage/records/'.$record_id.'/'.$filename, $filename, $headers);
});
You will need to adjust your HTML::link() calls to reflect the downloads route, whatever you choose to call it.