Comment mettre en place une functionnalité d'upload de fichier avec laravel
Mettre en place une fonctionnalités d'upload de fichier avec le framework laravel est une tache relativement simple et surtout courante du coup je vous montre dans ici dans ce tutoriel comment mettre cette fonctionnalités .
Pour ce faire Créons un modèle d'image, une migration, un contrôleur et des routes
php artisan make:model Image -mc
Apres avoir exécuté cette commande laravel vous génerera un modèle , et une migration
{
Schema::create('images', function (Blueprint $table) {
$table->id();
$table->string('image');
$table->timestamps();
});
}
Et le modèle
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Image extends Model
{
use HasFactory;
protected $fillable = [
'image'
];
}
Apres le contrecoller
amespace App\Http\Controllers;
use App\Models\Image;
use Illuminate\Http\Request;
class ImageController extends Controller
{
public function index()
{
return view('image');
}
public function store(Request $request)
{
$this->validate($request, [
'image' => 'required|image|mimes:jpg,png,jpeg,gif,svg|max:2048',
]);
$image_path = $request->file('image')->store('image', 'public');
$data = Image::create([
'image' => $image_path,
]);
session()->flash('success', 'Image a bien été chargée');
return redirect()->route('image.index');
}
}
Une route pour faire le lien entre la vue et le controller amespace App\Http\Controllers;
Route::get('/image', [ImageController::class,'index'])->name('image.index');
Route::post('/image', [ImageController::class,'store'])->name('image.store');
Apres la vue
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>image Upload in Laravel 9</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body>
<div class="relative flex items-center min-h-screen justify-center overflow-hidden">
<form action="{{ route('image.store') }}" method="POST" class="shadow p-12" enctype="multipart/form-data">
@csrf
<label class="block mb-4">
<span class="sr-only">Choose File</span>
<input type="file" name="image"class="block w-full text-sm text-gray-500 file:mr-4 file:py-2 file:px-4 file:rounded-full file:border-0 file:text- sm file:font-semibold file:bg-blue-50 file:text-blue-700 hover:file:bg-blue-100" />
@error('image')
<span class="text-red-600 text-sm">{{ $message }}</span>
@enderror
</label>
<button type="submit" class="px-4 py-2 text-sm text-white bg-indigo-600 rounded">Submit</button>
</form>
</div>
</body>
</html>
Executer cette commande pour faire le lien entre le fichier public et le fichier storage
php artisan storage:link
Démarrer votre application laravel pour tester la fonctionnalité
php artisan serve