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 remets FILESYSTEM_DRIVER en local, je ne peux pas référencer les ressources dans mon dossier DOCROOT/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 sur DOCROOT/storage/app/public/ qui sont utilisés par le pilote local ?

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.

0
manifestor 7 août 2018 à 22:42

1 réponse

Meilleure 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 :

2
Devon 7 août 2018 à 23:24