Menu

Laravel 9 Multiple Images Upload with Validation Example

Written by

Assuming Laravel 9 follows similar conventions as previous versions, here’s how you might achieve multiple image uploads with validation:

Setup Routes:

First, define the routes in your routes/web.php file to handle the upload form and the submission.

use App\Http\Controllers\ImageUploadController;

Route::get('/image-upload', [ImageUploadController::class, 'showUploadForm']);
Route::post('/image-upload', [ImageUploadController::class, 'uploadImages']);

 

Create Controller: Next, create a controller to handle the image uploads. You can generate a controller using the Artisan command:

php artisan make:controller ImageUploadController

 

In the ‘ImageUploadController.php file, you’ll have methods like showing  ‘UploadForm‘ to display the upload form and uploadImages to handle the submission.

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ImageUploadController extends Controller
{
    public function showUploadForm()
    {
        return view('image-upload');
    }

    public function uploadImages(Request $request)
    {
        $request->validate([
            'images' => 'required|array',
            'images.*' => 'image|mimes:jpeg,png,jpg,gif|max:2048',
        ]);

        if ($request->hasFile('images')) {
            foreach ($request->file('images') as $image) {
                $imageName = time() . '-' . $image->getClientOriginalName();
                $image->storeAs('uploads', $imageName);
            }

            return redirect()->back()->with('success', 'Images uploaded successfully.');
        }

        return redirect()->back()->with('error', 'No images were uploaded.');
    }
}

 

Create View:

Create a Blade view named ‘image-upload.blade.php’  to display the upload form.

<!DOCTYPE html>
<html>
<head>
    <title>Multiple Image Upload</title>
</head>
<body>

@if(session('success'))
    <div>{{ session('success') }}</div>
@endif

@if(session('error'))
    <div>{{ session('error') }}</div>
@endif

<form action="/image-upload" method="POST" enctype="multipart/form-data">
    @csrf
    <input type="file" name="images[]" multiple>
    <button type="submit">Upload</button>
</form>

</body>
</html>

 

 

Article Categories:
Laravel

Comments are closed.

Shares