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.
The post Discover File Downloads in Laravel with Storage::download appeared first on Laravel News.
Join the Laravel Newsletter to get Laravel articles like this directly in your inbox.