Actualités WEB et WordPress, thèmes, plugins. Ici, nous partageons des conseils et les meilleures solutions de sites Web.

Comment télécharger un fichier sur S3 à l’aide du système de fichiers Laravel

125

Récemment, j’ai publié un article Télécharger des fichiers sur Amazon S3 à l’aide d’AWS PHP SDK. L’un de nos lecteurs a demandé comment effectuer des opérations de téléchargement de fichiers AWS S3 avec Laravel. En ce qui concerne Laravel, nous devons suivre une voie différente par rapport à PHP. Dans cet article, nous étudions comment télécharger un fichier sur S3 à l’aide d’un système de fichiers Laravel.

Laravel Filesystem fournit différents pilotes pour fonctionner avec le système de fichiers local, Amazon S3, Rackspace, etc. Ces pilotes offrent un moyen pratique et facile de télécharger des fichiers localement ou sur le cloud.

Amazon S3 est un service populaire pour stocker des images, des fichiers et des documents. Deuxièmement, conserver vos fichiers sur le cloud permettra d’économiser beaucoup de bande passante pour votre site Web. Il économise votre espace d’hébergement et les performances du cloud sont évolutives.

Cela dit, examinons comment télécharger un fichier sur S3 à l’aide du système de fichiers Laravel.

Obtenez vos informations d’identification de sécurité AWS

Pour commencer avec S3, vous devez avoir un compte sur Amazon Web Services. Une fois que vous l’avez, assurez-vous d’activer le service S3.

Après avoir activé le service S3, obtenez vos informations d’identification de sécurité dont nous aurons besoin dans la dernière partie du didacticiel.

Comment télécharger un fichier sur S3 à l'aide du système de fichiers Laravel

Configuration du pilote S3 dans Laravel

Comme dit, je vais utiliser le système de fichiers Laravel. Cela nécessite la configuration du pilote S3. Rendez-vous dans votre éditeur et ouvrez le fichier config/filesystems.php. Dans ce fichier, vous pouvez voir le pilote défini pour S3 sous « disques ».

config/filesystems.php

<?php
 
return [
 
    .....
 
    'disks' => [
 
        .....
 
        's3' => [
            'driver' => 's3',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'region' => env('AWS_DEFAULT_REGION'),
            'bucket' => env('AWS_BUCKET'),
            'url' => env('AWS_URL'),
            'endpoint' => env('AWS_ENDPOINT'),
        ],
 
    ],
];

Dans le code ci-dessus, Laravel utilise la méthode env() pour définir les valeurs. Cela signifie que vous devez définir ces constantes dans votre .envfichier. Vous n’avez pas besoin de définir les constantes AWS_URL et AWS_ENDPOINT car cela n’est pas nécessaire pour télécharger des fichiers sur le compartiment S3.

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=
AWS_BUCKET=

Ajoutez la valeur à chaque constante ci-dessus. Ensuite, ouvrez le terminal dans le répertoire racine de votre projet et exécutez la commande :

composer require league/flysystem-aws-s3-v3 ~1.0

Cette commande installera la bibliothèque requise qui appelle l’API AWS et effectue les opérations cloud.

Télécharger un fichier sur S3 dans Laravel

Nous avons tous réglé avec la configuration de base. Nous pouvons maintenant passer à la partie réelle du téléchargement de fichiers. Créons un formulaire simple avec une entrée de fichier et un bouton d’envoi.

Ajoutez le code ci-dessous dans votre fichier blade.

<form action="{{ url('ROUTE_URL') }}" method="post" enctype="multipart/form-data">
    <div class="form-group">
        <label for="exampleInputFile">File input</label>
        <input type="file" name="profile_image" id="exampleInputFile">
    </div>
    {{ csrf_field() }}
    <button type="submit" class="btn btn-default">Submit</button>
</form>

Remplacez l’espace réservé ROUTE_URL par votre itinéraire réel.

Laravel donne une Storagefaçade qui permet d’interagir avec les disques configurés. Dans notre cas, le disque est S3. Ajoutez la Storagefaçade dans le contrôleur comme suit :

<?php
 
namespace AppHttpControllers;
 
use IlluminateHttpRequest;
use IlluminateSupportFacadesStorage;
...
...

Après avoir inclus une façade, vous pouvez télécharger des fichiers sur S3. Écrivez le code ci-dessous dans votre méthode qui envoie le fichier sur S3.

<?php
...
...
public function store(Request $request)
{
    if($request->hasFile('profile_image')) {
 
        //get filename with extension
        $filenamewithextension = $request->file('profile_image')->getClientOriginalName();
 
        //get filename without extension
        $filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);
 
        //get file extension
        $extension = $request->file('profile_image')->getClientOriginalExtension();
 
        //filename to store
        $filenametostore = $filename.'_'.time().'.'.$extension;
 
        //Upload File to s3
        Storage::disk('s3')->put($filenametostore, fopen($request->file('profile_image'), 'r+'), 'public');
 
        //Store $filenametostore in the database
    }
}

Dans le code ci-dessus, je génère un nom unique pour le fichier, puis je le télécharge sur S3. Un utilisateur doit stocker le nom de fichier dans la base de données pour une utilisation ultérieure. Lors du téléchargement d’un fichier sur S3, j’ai passé le troisième paramètre en tant que « public ». Si vous ne souhaitez pas définir le fichier comme « public », ignorez ce paramètre.

L’utilisateur peut obtenir l’URL du fichier téléchargé en utilisant le code :

$url = Storage::disk('s3')->url('YOUR_FILENAME_HERE');

Pour supprimer un fichier du compartiment S3, utilisez la méthode de suppression comme indiqué ci-dessous.

Storage::disk('s3')->delete('YOUR_FILENAME_HERE');

Il s’agit de télécharger un fichier sur S3 à l’aide du système de fichiers Laravel. J’espère que vous avez pris connaissance du système fourni par Laravel pour interagir avec Amazon S3. S’il vous plaît partager vos pensées et suggestions dans la section commentaires ci-dessous.

Articles Liés

Source d’enregistrement: artisansweb.net

Ce site utilise des cookies pour améliorer votre expérience. Nous supposerons que cela vous convient, mais vous pouvez vous désinscrire si vous le souhaitez. J'accepte Plus de détails