Comment télécharger des images sur un autre serveur via FTP dans Laravel
Voulez-vous télécharger vos fichiers depuis votre application Laravel vers un autre serveur via FTP ? Laravel est livré avec la prise en charge intégrée du téléchargement de fichiers sur un serveur externe ou un cloud. Dans ce guide, nous vous montrons comment télécharger des fichiers (images) sur un autre serveur via FTP sur le site Web de Laravel.
L’hébergement d’images sur un autre serveur peut aider à améliorer la vitesse de votre site. Cette technique est une sorte de connexion parallèle entre un navigateur Web et les serveurs. Cela réduit la charge d’un serveur car le navigateur d’images appellera un autre serveur.
Laravel Filesystem fournit un moyen pratique de gérer nos fichiers sur le cloud ou un serveur externe. L’utilisateur peut choisir différents fournisseurs de stockage Laravel comme S3, Rackspace, FTP ou SFTP. Jetons un coup d’œil au téléchargement de fichiers Laravel à l’aide du pilote FTP.
Télécharger des fichiers sur un autre serveur via un pilote FTP
Pour commencer, vous devez connaître les détails de votre hôte FTP, de votre nom d’utilisateur FTP et de votre mot de passe FTP. Une fois que vous êtes prêt avec les détails, ouvrez les .env
fichiers et ajoutez les détails comme ci-dessous :
FTP_HOST=YOUR_FTP_HOST_VALUE
FTP_USERNAME=YOUR_FTP_USERNAME_VALUE
FTP_PASSWORD=YOUR_FTP_PASSWORD_VALUE
Assurez-vous de remplacer les espaces réservés par les valeurs réelles. Ensuite, ouvrez le config/filesystems.php
fichier et ajoutez la configuration ‘ftp’ au tableau ‘disks’.
config/filesystems.php
<?php
return [
......
'disks' => [
......
'ftp' => [
'driver' => 'ftp',
'host' => env('FTP_HOST'),
'username' => env('FTP_USERNAME'),
'password' => env('FTP_PASSWORD'),
'root' => 'DIR_PATH_TO_WHERE_IMAGE_STORE' // for example: /var/www/html/dev/images
],
],
];
Remplacez DIR_PATH_TO_WHERE_IMAGE_STORE par le chemin réel où vous devez stocker les images. Par exemple, si nous avons un dossier appelé ‘images’ et que le chemin d’accès à ce dossier est /var/www/html/dev/images, alors ce chemin sera la valeur de ‘root’ dans le tableau ci-dessus.
Pour télécharger des fichiers via FTP, nous avons besoin d’un formulaire où un utilisateur peut soumettre l’image. Ajoutez le code ci-dessous dans votre fichier de vue.
<form action="{{ url('PASS_ACTION_URL_HERE') }}" method="post" enctype="multipart/form-data">
<div class="form-group">
<label for="exampleInputFile">File input</label>
<input type="file" name="profile_image" id="exampleInputFile" multiple />
</div>
{{ csrf_field() }}
<button type="submit" class="btn btn-default">Submit</button>
</form>
Vous devez remplacer PASS_ACTION_URL_HERE par votre itinéraire réel. Comme nous utilisons un stockage Laravel pour le téléchargement de fichiers, l’utilisateur doit ajouter Facade au fichier du contrôleur comme suit :
use IlluminateSupportFacadesStorage;
Enfin, le code de fonction de votre contrôleur serait le suivant :
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.'_'.uniqid().'.'.$extension;
//Upload File to external server
Storage::disk('ftp')->put($filenametostore, fopen($request->file('profile_image'), 'r+'));
//Store $filenametostore in the database
}
return redirect('images')->with('status', "Image uploaded successfully.");
}
‘profile_image’ est le nom de notre fichier d’entrée. Nous construisons le nom unique de notre fichier, puis le téléchargeons sur un serveur externe. Notez que nous avons utilisé la méthode Storage::disk(‘ftp’). Cette fonction stockerait notre fichier dans le chemin défini dans la configuration. Un utilisateur doit stocker la valeur ‘$filenametostore’ dans votre base de données.
Récupérer ou supprimer une image
Nous avons affaire aux images, donc évidemment, nous devons afficher ces images sur le site Web. Comme nous stockons ces images sur le serveur externe connu, un utilisateur doit donc connaître le chemin HTTP du dossier dans lequel nous stockons les images. Cela peut être quelque chose comme YOUR_DOMAIN_URL/images/. Dans la méthode du contrôleur, nous devons stocker le nom de l’image dans la base de données. Ainsi, notre balise HTML img sera la suivante :
<img src="YOUR_DOMAIN_URL/images/FILE_NAME" />
Ici FILE_NAME est le nom de votre image stocké dans la base de données. L’utilisateur peut supprimer le fichier de la manière suivante :
Storage::disk('ftp')->delete('FILE_NAME');
Articles Liés
- Comment télécharger un fichier sur S3 à l’aide du système de fichiers Laravel
- Charger des fichiers sur Amazon S3 à l’aide d’AWS PHP SDK