Comment obtenir le chemin d'accès au fichier à l'aide de Stockage de façade dans laravel 5?
J'ai fait des expériences à l'aide de la nouvelle Flysystem intégration avec Laravel 5. Je suis le stockage 'localisées les chemins d'accès à la DB, et d'obtenir le Stockage de façade à terminer le tracé. Par exemple, j'ai magasin screenshots/1.jpg
et à l'aide de
Storage::disk('local')->get('screenshots/1.jpg')
ou
Storage::disk('s3')->get('screenshots/1.jpg')
Je peux récupérer le même fichier sur plusieurs disques.
get
récupère le contenu du fichier, mais je suis l'espoir de l'utiliser dans mes vues comme ceci:
<img src="{{ Storage::path('screenshots/1.jpg') }}" />
mais en chemin, ou quoi que ce soit en mesure de récupérer le chemin complet n'est pas disponible (pour autant que je peux voir). Alors, comment puis-je retourner le chemin d'accès complet? Ou, je me demande si cela est normal? Si oui, pourquoi ne suis-je pas censé être en mesure d'obtenir le chemin d'accès complet? Ou, vais-je à propos de cette complètement dans le mauvais sens?
- Vous demandez de l'url et non pas le chemin.
Vous devez vous connecter pour publier un commentaire.
Edit: la Solution pour les L5.2+
Il y a de mieux et de plus simple solution.
Utilisation
Storage::url($filename)
pour obtenir le chemin d'accès complet de l'URL d'un fichier donné. Notez que vous devez définirS3
que votre espace de stockage système de fichiers dansconfig/filesystems.php
:'default' => 's3'
Bien sûr, vous pouvez également faire
Storage::disk('s3')->url($filename)
de la même manière.Comme vous pouvez le voir dans
config/filesystems.php
il y a aussi un paramètre'cloud' => 's3'
défini, qui fait référence au Nuage de système de fichiers. Dans le cas où vous souhaitez mantain le dossier de stockage dans le serveur local, mais récupérer/sauvegarder des fichiers dans le cloud utiliserStorage::cloud()
, qui a aussi le même système de fichiers des méthodes, c'est à direStorage::cloud()->url($filename)
.La Laravel la documentation ne mentionne pas cette méthode, mais si vous voulez en savoir plus vous pouvez consulter son code source ici.
Le Chemin d'accès à votre disque de Stockage serait :
Je ne connais pas de plus court des solutions pour que...
Vous pourriez partager l' $storagePath votre point de Vue et puis il suffit d'appeler
applyPathPrefix
comme ceci:Storage::disk('local')->getDriver()->getAdapter()->applyPathPrefix('myImg.jpg');
applyPathPrefix
vous pouvez copier. Très étrange. (vous pouvez le tester en double cliquant sur le dernier nom de la méthode dans votre exemple.getDriver()
n'est pas nécessaire. SimplementStorage::disk('local')->getAdapter()->getPathPrefix()
fonctionnera aussi bien.Storage::path
, voir Bilal réponseCette méthode existe depuis Laravel 5.4, vous pouvez l'obtenir par:
C'est comment je l'ai eu à travailler - la commutation entre le s3 et le répertoire local des chemins avec une variable d'environnement, en passant le chemin d'accès à tous les points de vue.
Dans .env:
Dans config/filesystems.php:
Dans app/Fournisseurs/AppServiceProvider:
return Storage::disk('s3')->getDriver()->getAdapter()->getClient()->getObjectUrl(env('S3_BUCKET'), '').'/';
Bien, il y a des semaines, j'ai fait un très semblable question (Obtenir CDN url à partir du fichier téléchargé à l'aide de Storage): je voulais que le CDN url pour afficher l'image de mon point de vue (que vous avez besoin ).
Cependant, après examen du package API j'ai confirmé qu'il n'y a aucun moyen de faire cette tâche. Donc, ma solution a été d'éviter à l'aide de
flysystem
. Dans mon cas, j'avais besoin de jouer avec RackSpace. Donc, finalement décider de créer mon paquet et faire mon propre forfait de stockage à l'aide de Le SDK PHP pour OpenStack.De cette façon, vous avez un accès complet aux fonctions que vous avez besoin, comme
getPublicUrl()
afin d'obtenir l'URL publique à partir d'un cdn conteneur:En conclusion, si besoin de prendre le service de stockage à un autre niveau, puis
flysystem
n'est pas assez. Pourlocal
fins, vous pouvez essayer de @nXu la solution deD'abord obtenir l'url du fichier/lien puis chemin, comme ci-dessous:
Méthode de magasin:
Route:
Contrôleur:
Vue:
Si vous voulez juste pour afficher de stockage (disque) chemin d'accès ce:
Aussi, si vous êtes intéressé, j'ai créé un package (https://github.com/fsasvari/laravel-uploadify) juste pour Laravel de sorte que vous pouvez utiliser tous les champs sur Éloquent champs de modèle:
Si vous avez besoin d'absolu URL du fichier, utilisez le code ci-dessous:
Prendre un coup d'oeil à ceci: Comment utiliser storage_path() pour afficher une image dans laravel 4 . La même chose s'applique à Laravel 5:
De stockage est pour le système de fichiers, et la plus grande partie n'est pas accessible par le serveur web. La solution recommandée est de stocker les images quelque part dans le dossier public (qui est la racine du document), dans le
public/screenshots/
par exemple.Ensuite, lorsque vous souhaitez afficher, utilisez
asset('screenshots/1.jpg')
.Storage::path()
retourne le chemin d'accès du fichier sur votre serveur, mais vous avez besoin d'une URL et le serveur web ne peut que servir des fichiers à partir de la racine du document, qui est<project>/public
. Créer vos répertoires à l'intérieur et à l'utilisationurl()
ouasset()
dans la lame de modèles.Storage::path()
n'existe pas, je voudrais biengetenv('debug')
et de décider lequel utiliser.Dans mon cas, j'ai fait distincte de la méthode pour les fichiers locaux, dans ce fichier:
src/Illuminate/Filesystem/FilesystemAdapter.php
puis, je crée des pull request pour cadre, mais pas encore fusionné dans le noyau principal encore:
https://github.com/laravel/framework/pull/13605
Peut être quelqu'un de fusion de celui-ci))
Une autre solution que j'ai trouvé est: est-ce
Sera de retour l'url avec le chemin de base de l'entrepôt des documents