Je suis un peu confus quant à la meilleure approche pour accéder à une image, qui est téléchargée sur S3 et livrée via CloudFront et l'affiche dans une vue (à l'aide de l'URL CloudFront). J'utilise Laravel 5.5
et j'ai déjà déposé l'URL CDN dans ma configuration S3 :
'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' => 'https://xxxxxx.cloudfront.net/',
],
Les possibilités suivantes fonctionnent
- Copiez et collez le lien CloudFront dans le modèle (pas de la manière laravel, je suppose).
- En utilisant
<img src="{{ Storage::url('assets/img/image.png') }}" />
. Celui-ci fonctionne, mais est-ce la bonne approche ? Le problème ici est que si je remetsFILESYSTEM_DRIVER
en local, je ne peux pas référencer les ressources dans mon dossierDOCROOT/public/img
comme je l'ai fait plus tôt avec{{ asset('img/icons/time.png') }}
, donc je perds de la flexibilité - peut-être dois-je copier les éléments surDOCROOT/storage/app/public/
qui sont utilisés par le pilotelocal
?
J'intègre CloudFront pour la première fois à une application Laravel, alors quelqu'un qui l'a fait auparavant pourrait-il me dire quelle est la bonne approche ? Merci beaucoup.
1 réponse
C'est une bonne approche. Mais lorsque vous utilisez le pilote du système de fichiers local, vous utiliserez le répertoire public/storage/assets/img
, pas le répertoire public/img
pour le rendre équivalent.
https://laravel.com/docs/5.6/filesystem#the-public-disk
Le disque public
Le disque public est destiné aux fichiers qui seront accessibles au public. Par défaut, le disque public utilise le pilote local et stocke ces fichiers dans storage/app/public. Pour les rendre accessibles depuis le Web, vous devez créer un lien symbolique de public/storage vers storage/app/public. Cette convention conservera vos fichiers accessibles au public dans un répertoire qui peut être facilement partagé entre les déploiements lors de l'utilisation de systèmes de déploiement sans temps d'arrêt comme Envoyer.
Pour créer le lien symbolique, vous pouvez utiliser la commande storage: link Artisan:
php artisan storage:link
URL de fichiers
Vous pouvez utiliser la méthode url pour obtenir l'URL du fichier donné. Si vous utilisez le pilote local, cela ajoutera généralement /storage au chemin donné et renverra une URL relative au fichier. Si vous utilisez le pilote s3 ou rackspace, l'URL distante complète sera renvoyée :
Questions connexes
Questions liées
De nouvelles questions
laravel
Laravel est un framework web PHP gratuit et open-source, créé par Taylor Otwell et destiné au développement d'applications web suivant le modèle architectural modèle-vue-contrôleur (MVC) et basé sur Symfony. Le code source de Laravel est hébergé sur GitHub et sous licence selon les termes de la licence MIT.