📌 Why File Upload & Storage is Important
Almost every web application requires file uploads:
- Profile pictures
- Documents
- Images or videos for blogs
- Reports for admin dashboards
Laravel makes file upload and storage easy and secure.
⚙️ Step 1: Configure Filesystem
Laravel uses Filesystem API to handle files. Default configuration is in:
config/filesystems.php
Common disks:
local→ storage/apppublic→ storage/app/public (accessible via URL)s3→ cloud storage
Create symbolic link to make public files accessible:
php artisan storage:link
🔹 Step 2: Create File Upload Form
Example: Uploading images
resources/views/upload.blade.php:
@extends('layouts.app')
@section('content')
<h1>Upload Image</h1>
@if(session('success'))
<div>{{ session('success') }}</div>
@endif
<form action="{{ route('upload.store') }}" method="POST" enctype="multipart/form-data">
@csrf
<input type="file" name="image">
<button type="submit">Upload</button>
</form>
@endsection
Key Points:
enctype="multipart/form-data"→ required for file uploads@csrf→ security token
🔹 Step 3: Create Route & Controller
Route
routes/web.php:
use App\Http\Controllers\UploadController;
Route::get('/upload', [UploadController::class,'create']);
Route::post('/upload', [UploadController::class,'store'])->name('upload.store');
Controller
php artisan make:controller UploadController
app/Http/Controllers/UploadController.php:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class UploadController extends Controller
{
public function create() {
return view('upload');
}
public function store(Request $request) {
$request->validate([
'image' => 'required|image|mimes:jpeg,png,jpg,gif|max:2048'
]);
$path = $request->file('image')->store('images','public');
return back()->with('success','Image uploaded successfully! Path: '.$path);
}
}
store('images', 'public')→ stores instorage/app/public/images- Validation ensures file type and size restrictions
🔹 Step 4: Display Uploaded Images
<img src="{{ asset('storage/'.$path) }}" alt="Uploaded Image" width="200">
asset('storage/...')→ generates public URL
🔹 Step 5: Handling File Deletion
Storage::disk('public')->delete($path);
- Removes the file from
storage/app/public
🔹 Step 6: Advanced: Multiple File Uploads
<input type="file" name="images[]" multiple>
Controller:
foreach($request->file('images') as $image) {
$image->store('images','public');
}
- Loops through files and stores each one
🔹 Step 7: Storing Files in Cloud (S3 Example)
Set up .env:
FILESYSTEM_DRIVER=s3
AWS_ACCESS_KEY_ID=your_key
AWS_SECRET_ACCESS_KEY=your_secret
AWS_DEFAULT_REGION=your_region
AWS_BUCKET=your_bucket
Then store:
$path = $request->file('image')->store('images', 's3');
$url = Storage::disk('s3')->url($path);
- Generates public URL for cloud files
📌 Key Takeaways
This week you learned:
- How to configure Laravel filesystem
- How to create file upload forms
- How to validate uploaded files
- How to store files locally or in public folder
- How to handle multiple file uploads and deletion
- Optional: Store files in cloud storage (S3)