Table des matières : [Masquer]
Comment effectuer un téléchargement de fichiers dans une application Laravel .
Nous allons créer deux routes : l’une pour la méthode GET afin d’afficher les formulaires, et l’autre pour la méthode POST afin de gérer le téléchargement des fichiers. Nous avons conçu un formulaire simple avec un champ d’entrée pour les fichiers. Vous devez simplement sélectionner un fichier, qui sera ensuite téléchargé dans le répertoire “uploads” du dossier public.
Étapes pour le téléchargement de fichiers avec Laravel
Installer Laravel 11
Créer un contrôleur
Créer des routes
Créer un fichier Blade
Étape 1 : Installer Laravel 11
composer create-project laravel/laravel example-app
Étape 2 : Créer un contrôleur
Créez un nouveau contrôleur nommé FileController avec deux méthodes : index() pour afficher les vues et store() pour gérer la logique de stockage des fichiers.
php artisan make:controller FileController
Ajoutez les méthodes nécessaires pour afficher les formulaires et gérer le téléchargement des fichiers.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\View\View;
use Illuminate\Http\RedirectResponse;
class FileController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(): View
{
return view('fileUpload');
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function store(Request $request): RedirectResponse
{
$request->validate([
'file' => 'required|mimes:pdf,xlx,csv|max:2048',
]);
$fileName = time().'.'.$request->file->extension();
$request->file->move(public_path('uploads'), $fileName);
/*
Write Code Here for
Store $fileName name in DATABASE from HERE
*/
return back()->with('success', 'File uploaded successfully!')
->with('file', $fileName);
}
}
// Store File in Storage Folder
$request->file->storeAs('uploads', $fileName);
// storage/app/uploads/file.png
// Store File in Public Folder
$request->file->move(public_path('uploads'), $fileName);
// public/uploads/file.png
//Store File in S3
$request->file->storeAs('uploads', $fileName, 's3');
Étape 3 : Créer des routes
Ajoutez des routes dans le fichier routes/web.php pour gérer les requêtes GET et POST :
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\FileController;
Route::get('file-upload', [FileController::class, 'index']);
Route::post('file-upload', [FileController::class, 'store'])->name('file.store');
Étape 4 : Créer un fichier Blade
// resources/views/fileUpload.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Laravel 11 File Upload Example - ItSolutionStuff.com</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdThisnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" />
</head>
<body>
<div class="container">
<div class="card mt-5">
<h3 class="card-header p-3"><i class="fa fa-star"></i> Laravel 11 File Upload Example - ItSolutionStuff.com</h3>
<div class="card-body">
@session('success')
<div class="alert alert-success" role="alert">
{{ $value }}
</div>
@endsession
<form action="{{ route('file.store') }}" method="POST" enctype="multipart/form-data">
@csrf
<div class="mb-3">
<label class="form-label" for="inputFile">File:</label>
<input
type="file"
name="file"
id="inputFile"
class="form-control @error('file') is-invalid @enderror">
@error('file')
<span class="text-danger">{{ $message }}</span>
@enderror
</div>
<div class="mb-3">
<button type="submit" class="btn btn-success"><i class="fa fa-save"></i> Upload</button>
</div>
</form>
</div>
</div>
</div>
</body>
</html>
Créez un fichier nommé fileUpload.blade.php dans le dossier resources/views.
Ce fichier contiendra le formulaire permettant de sélectionner et télécharger un fichier.
Une fois toutes les étapes nécessaires terminées, lancez l’application Laravel avec la commande suivante :
php artisan serve
Ensuite, ouvrez votre navigateur web, entrez l’URL suivante et visualisez le résultat de l’application :
http://localhost:8000/file-upload