article

Wednesday, June 21, 2023

Laravel 10 Multiple Image Upload

Laravel 10 Multiple Image Upload

Download Laravel App

composer create-project --prefer-dist laravel/laravel my-app
C:\xampp\htdocs\laravel10project>composer create-project laravel/laravel laravel10project

Connecting our Database

open .env file root directory.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laraveldb
DB_USERNAME=root
DB_PASSWORD=

Database Migration
php artisan migrate

C:\xampp\htdocs\laravel\laravel10project>php artisan migrate
Migration table created successfully.

check database table

Create Controller
php artisan make:controller ImageController
C:\xampp\htdocs\laravel\my-app>php artisan make:controller ImageController

app/Http/Controllers/ImageController.php
//app/Http/Controllers/ImageController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\View\View;

class ImageController extends Controller
{
    public function index(): View
    {
        return view('image');
    }

    public function imageUpload(Request $request): RedirectResponse
    {
        $request->validate([
            'image.*' => 'required|image|mimes:jpeg,jpg,png,gif,svg|max:5120',
        ]);

        foreach ($request->image as $value) {
            $imageName = time().'_'.$value->getClientOriginalName();
            $value->move(public_path('images'),$imageName);

            $imageNams[] = $imageName;
        }

        return redirect()->back()->withSuccess('You have successfully upload image.')->with('image',$imageNams);
    }

}
View Blade
Bootstrap 5
https://getbootstrap.com/docs/5.0/getting-started/introduction/
https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css

resources/views/image.blade.php
//resources/views/image.blade.php
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Laravel 10 Multiple Image Upload</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
<div class="container">
	<div class="panel panel-primary">
	    <div class="panel-heading">
	    	<h2>Laravel 10 Multiple Image Upload</h2>
	    </div>
	    <div class="panel-body">
	    	@if($message = Session::get('success'))
	    		<div class="alert alert-success" role="alert">
	    			<strong>{{ $message }}</strong>
	    		</div>
	    		@foreach(\Session::get('image') as $imgs)
	    			<img src="images/{{ $imgs }}">
	    		@endforeach
	    	@endif
	    	<form action="{{ route('image.store') }}" method="post" enctype="multipart/form-data">
	    		@csrf
	    		<div class="mb-3">
	    			<label class="form-label">Image:</label>
	    			<input type="file" name="image[]" class="form-control @error('image.*') is-invalid @enderror" multiple>

	    			@error('image.*')
	    				<span class="text-danger">{{ $message }}</span>
	    			@enderror
	    		</div>
	    		<div class="mb-3">
	    			<button type="submit" class="btn btn-success">Upload</button>
	    		</div>
	    	</form>
	    </div>
	</div>
</div>
</body>
</html>
Routes
routes/web.php
//routes/web.php
<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ImageController;

Route::get('/', function () {
    return view('welcome');
});

Route::controller(ImageController::class)->group(function(){
    Route::get('image-upload','index');
    Route::post('image-upload','imageUpload')->name('image.store');
});
Run C:\xampp\htdocs\laravel\my-app>php artisan serve
Starting Laravel development server: http://127.0.0.1:8000

Related Post