Vous pouvez télécharger des fichiers dans Laravel à l'aide de sa magnifique API unifiée pour interagir avec de nombreux types de systèmes de stockage différents, du disque local au stockage d'objets distants comme S3.
Comme de nombreux autres composants Laravel, vous pouvez interagir avec le système de fichiers de l'application via Storage Facade : Illuminate/Support/Facades/Storage
Cette classe vous permet d'accéder à des pilotes de stockage appelés disques qui implémentent une interface commune. Vous pouvez donc modifier le stockage physique sous-jacent sans toucher au code de votre application.
Cela vous permet non seulement de lire et d'écrire à partir de votre système de fichiers local, FTP ou AWS S3 de la même manière, mais également de choisir une option différente selon que vous développez dans l'environnement local ou exécutez l'application en production. .
Si vous souhaitez apprendre à construire votre façade personnalisée, lisez l'article ci-dessous :
https://inspector.dev/how-to-extend-laravel-with-driver-based-services/
Pour des articles plus techniques vous pouvez me suivre sur Linkedin ou X.
Laravel gère l'accès au stockage via des « disques » configurés dans le fichier de configuration config/filesystems.php. Chaque disque possède un nom d'identification et un pilote qui vous permet de définir le type réel de système de stockage qui sera connecté à l'application.
En fonction du driver, d'autres options seront alors configurables. Par exemple, les disques avec des pilotes locaux nécessitent de définir le paramètre root pour indiquer à quel répertoire local réel ils correspondent. Ceux qui disposent de pilotes s3 doivent définir les différentes clés, secrets, régions et compartiments pour accéder aux systèmes compatibles AWS S3 ou S3.
Parmi les différents disques configurés par défaut, celui nommé public est l'un des plus intéressants. Ce disque est conçu pour héberger les fichiers qui doivent être rendus accessibles au public par l'application Laravel.
'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ],
Comme vous pouvez le voir dans l'extrait ci-dessus, le disque a local comme pilote et la racine est le répertoire private storage/app/public.
Comment un annuaire privé peut-il être accessible au public ?
Pour permettre au disque public de fonctionner, vous devez créer un lien symbolique pour connecter le dossier public Laravel à la racine privée configurée dans le disque.
Heureusement, Laravel dispose d'une commande intégrée pour effectuer cette configuration automatiquement.
php artisan storage:link
Vous devez exécuter cette commande la toute première fois que vous installez votre application Laravel sur une machine, y compris votre environnement local.
Lorsque vous créez un lien symbolique, Laravel connecte le dossier storage/app/public au dossier public/storage. Cela signifie que si vous souhaitez afficher un fichier sur une page publique, vous pouvez faire :
{{ asset('storage/file.txt') }}
Le fichier est physiquement stocké dans storage/app/public, mais grâce au lien symbolique, vous pouvez y accéder depuis le chemin yourdomain.com/storage/filename.ext
Ceci est nécessaire car le dossier public est généralement la racine du serveur Web (Apache, NGINX, etc.), c'est donc le seul chemin vers lequel votre site Web ou votre application peut pointer. Le lien symbolique rend une partie du dossier de stockage disponible à l'extérieur.
Voici un exemple de formulaire HTML pour permettre le téléchargement de fichiers :
<form action="/avatar" method="POST" enctype="multipart/form-data"> {{ csrf_field() }} <input type="file" name="avatar"/> <button type="submit"></button> </form>
Enregistrer ce fichier sur le disque est très simple. L'objet de requête possède la méthode file qui vous permet d'obtenir des éléments envoyés à partir d'un champ de formulaire de type fichier. Vous pouvez obtenir que l'élément transmette le nom du champ de saisie dans la méthode file pour accéder au fichier envoyé depuis le frontend.
namespace App/Http/Controllers; use App/Http/Resources/UserResource; class AvatarController extends Controller { public function update(Request $request) { $path = $request->file('avatar')->store("avatars/{$request->user()->id}"); $request->user()->update(['avatar' => $path]); return new UserResource($request->user()); } }
La méthode store récupère le fichier de la requête et l'enregistre sur le disque en générant un identifiant unique pour le nom du fichier, tandis que l'extension du fichier est récupérée à partir du type MIME fourni dans la requête. Il renvoie le chemin du fichier enregistré, qui peut donc être sauvegardé ou utilisé.
store utilisera le disque par défaut configuré dans config/filesystem.php mais vous pourrez éventuellement spécifier un disque différent à la volée :
$path = $request->file('avatar') ->store("avatars/{$request->user()->id}", 's3');
Le même résultat peut être obtenu en utilisant directement la façade Storage :
$path = Storage::disk('s3') ->putFile("avatars/{$request->user()->id}", $request->file('avatar'));
Personnellement, je préfère utiliser la façade Storage car elle rend la déclaration plus explicite.
Pour des articles plus techniques vous pouvez me suivre sur Linkedin ou X.
Inspector est un outil de surveillance de l'exécution de code spécialement conçu pour les développeurs de logiciels. Vous n'avez pas besoin d'installer quoi que ce soit au niveau du serveur, installez simplement le Package Laravel et vous êtes prêt à partir.
Si vous recherchez une surveillance HTTP, des informations sur les requêtes de base de données et la possibilité de transférer des alertes et des notifications vers votre environnement de messagerie préféré, essayez Inspector gratuitement. Enregistrez votre compte.
Ou apprenez-en plus sur le site : https://inspector.dev
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!