Comment dois-je servir une image avec Laravel?
Je suis utilisateur de stockage d'images de profil dans laravel dossier de stockage au lieu de le dossier public parce que je tiens à garder le dossier public propre à partir de l'utilisateur de l'encombrement.
Afin de servir une image à partir de ce dossier, j'ai créé un simple Contrôleur de l'Action comme suit:
public function profilePicture($person, $size = 40){
$profile_picture_url = storage_path().'/profile_pictures/'.$person['id'].'/profile_'.$size.'.jpg';
if(!File::exists( $profile_picture_url ))
App::abort(404);
return Image::make($profile_picture_url)->response('jpg');
}
Cela peut-il être considéré comme une bonne pratique, ou devrais-je simplement enregistrer des images dans le dossier public?
Vais-je rencontrer des problèmes de performance en faisant ainsi?
source d'informationauteur clod986
Vous devez vous connecter pour publier un commentaire.
La Réponse Courte à votre Question
Il n'est pas suggéré de pratique, parce que vous lisez le fichier et re-générer, qui va prendre le temps de traitement et de charger le serveur, mais qui dit tout dépend du nombre de demandes, la taille de l'image, etc. J'ai utilisé cette pratique de protéger/protéger images/fichiers à partir de l'accès public, de sorte que seule Authentifié membre peut accéder à des images/fichiers que c'est dans ce réponse. Encore une fois, selon la taille du fichier, le nombre de demandes et de spécification du serveur, je l'ai utilisé pour le moment et j'ai pas eu de problèmes avec la performance, il a bien fonctionné (mon serveur est 512MBMemory, 1 CoreProcessor, 20GBSSD Disque VPS solution). Vous pourriez essayer de tout voir.
Lien symbolique solution
Il est également possible de créer un lien symbolique comme
Cette solution n'affecte pas le rendement, mais vous avez besoin de documenter la solution dans votre documentation interne, dans le cas où vous déplacez votre programme d'installation à nouveau fournisseur ou dans le cas où vous avez besoin de recréer un lien vers le dossier de stockage.
Mais si vous souhaitez toujours avoir la solution complète pour le retour de l'image de dossier de stockage, tout d'abord nous avons besoin d'installer l'Intervention de l'Image pour Laravel, je ne suis pas sûr si cela fait déjà ou pas. si vous avez installer continuer ici, mais si pas suivi la dernière partie de cette réponse et que de continuer avec Laravel solution.
Laravel solution
Comme l'a dit, nous supposons que votre intervention, tout d'abord vous avez besoin pour créer un Itinéraire. La Route sera avant tout l'image de demande d'accès à notre Contrôleur.
Création De La Route
Après la création d'un itinéraire, nous avons besoin de créer un contrôleur pour prendre soin de demandes d'image à partir de notre route.
Créer ImagesController
De commande
Et votre contrôleur devrait ressembler à ceci.
Et n'oubliez pas d'ajouter
dans votre
ImagesController
classeEnfin, assurez-vous d'avoir créé la structure de dossier avec l'image de test.
Maintenant, si vous écrivez dans votre navigateur
Il affiche votre image, j'ai fait mon auto et de le tester.
Installer Intervention (sauter cette partie si vous avez déjà installé)
Suivre cette recommandation: http://image.intervention.io/getting_started/installation
Brièvement:
php composer require intervention/image
Et Dans votre
config/app
$fournisseurs de tableau ajouter les fournisseurs de services pour ce package.Ajouter la façade de ce package de $alias tableau.
La solution inspirée de cette réponse mais qui est de protéger l'image avec l'authentification en général et de ce réponse.
À l'aide de Laravel 5.2+
Image::make($pathToFile)->response()
peut être considéré comme une mauvaise pratique. Ceux qui recherchent une solution de servir des images de Laravel doit utiliserreturn response() -> file($pathToFile, $headers);
. Ceci va produire beaucoup moins de frais généraux, car il sert simplement le fichier au lieu de "l'ouvrir dans Photoshop" - du moins c'est ce que mon CPU moniteur dit.Voici la lien vers la documentation
Dans votre
User.php
modèle:Donc à chaque fois que vous appelez une obtenir une instance d'Utilisateur, vous aurez son avatar avec elle.
https://github.com/laravel/framework/issues/2079#issuecomment-22590551