web-dev-qa-db-fra.com

Laravel 5.4 Lien de stockage

je voudrais montrer une image dans un fichier html je vais dans le dossier de liens public/stockage/image est vide mais dans le stockage/image je trouve le fichier et son également enregistré dans la base de données. *

@foreach($cvs as $cv)
                    <div class="col-sm-6 col-md-4">
                    <div class="thumbnail">
                        <img src="{{ asset('storage/'.$cv->photo) }}" alt="...">
                        <div class="caption">
                        <h3>{{ $cv->titre }}</h3>
                        <p>{{$cv->presentation}}</p>
                        <p>
                            <a href="#" class="btn btn-primary" role="button">Afficher</a>
                            <a href="#" class="btn btn-success" role="button">Modifier</a>
                            <a href="#" class="btn btn-danger" role="button">Supprimer</a>
                         </p>
                        </div>
                    </div>
                    </div>
                    @endforeach
                    </div>
               </div>
4
mouhamed slaimi

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 à partir du Web, vous devez créer un lien symbolique à partir de public/storage à storage/app/public. doc Laravel

Créer un lien symbolique dans Linux

ln -s source_file myfile
4
Mayank Majithya

Tout d'abord dans le fichier (. Env créez une variable nommée FILESYSTEM_DRIVER et réglez-la sur - public comme ceci

FILESYSTEM_DRIVER=public

puis créer un lien symbolique par exécution

php artisan storage:link

après cela, utilisez simplement asset ()

<img src="{{ asset('storage/'.$cv->photo) }}" alt="...">

Ça marchera bien ????

3
Aamir Kalimi

résolu avec juste une simple modification sur la configuration des systèmes de fichiers/systèmes de fichiers à partir de:

'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
        ]

à :

'local' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
        ]
2
mouhamed slaimi

Comme le note Mayank Majithya, un lien symbolique est un moyen courant d'accéder aux fichiers storage/app/public/ À partir du répertoire public/, Et en fait la méthode le Laravel = docs dites que vous devez utiliser.

Si vous êtes sur un hébergement partagé qui interdit cela, vous pouvez également essayer d'utiliser la fonction d'assistance storage_path() de Laravel, comme ceci: <img src="{{ storage_path('subpaths/under/storage/filename.jpg') }}"> ( reference ).

Je remarque également que vous mentionnez que les images sont stockées dans la base de données. Si vous voulez dire que le fichier entier est stocké, il peut être plus efficace (une fois que vous avez déterminé le chemin d'accès au fichier) de stocker uniquement le chemin d'accès au fichier dans votre base de données, plutôt que le fichier entier (car il est déjà stocké sur le disque). Vous pouvez ensuite utiliser votre modèle pour obtenir le chemin d'accès (en supposant que votre table possède des colonnes pour, disons, 'src' et 'alt'):

<img src="{{ $mymodel->src }}" alt="{{ $mymodel->alt }}">
1
Jacob Runge

Cela a fonctionné pour moi. J'ai ajouté la commande "Artisan :: call ('storage: link', []);" au début du fichier d'itinéraire et supprimé le dossier de stockage du public.

Il est important de supprimer d'abord le dossier, sinon cela ne fonctionnera pas.

Suppression du code de la route, s'il fonctionne, car il ne devrait s'exécuter qu'une seule fois sur le serveur.

0
Carlos R