Discover File Downloads in Laravel with Storage::download
Last updated on by Harris Raftopoulos
Laravel's Storage::download simplifies secure file serving by providing a clean API for handling downloads while managing file storage abstraction.
<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\Storage; class FileController extends Controller{ public function download($filename) { return Storage::download( "documents/{$filename}", "custom-{$filename}", ['Content-Type' => 'application/pdf'] ); }}
Here is an example of using the Storage::download()
in a sample controller:
<?php namespace App\Http\Controllers; use App\Models\Document;use Illuminate\Http\Request;use Illuminate\Support\Facades\Storage; class DocumentController extends Controller{ public function download(Request $request, Document $document) { if (!$request->user()->canDownload($document)) { abort(403); } if (!Storage::exists($document->path)) { abort(404, 'File not found'); } $document->increment('download_count'); return Storage::download( $document->path, $document->original_name, [ 'Content-Type' => $document->mime_type, 'Content-Disposition' => 'attachment', 'Cache-Control' => 'no-cache, must-revalidate' ] ); }}
All in all, Storage::download provides a secure, efficient way to serve files while abstracting storage provider details.