web-dev-qa-db-fra.com

Laravel URL publique pour les fichiers de stockage

Je veux récupérer une URL publique pour tous les fichiers stockés à l'aide de 

storage :: putFile ('public/spares');

Donc, c'est le problème que j'utilise 

stockage :: fichiers ('public/spares');

mais il fournit cette sortie du répertoire de stockage de laravel

public/spares/image1.jpg
public/spares/image2.jpg
public/spares/image3.jpg

comment puis-je obtenir le lien public pour ce qui précède 

http://localhost/laravel/public/storage/spares/image1.jpg
http://localhost/laravel/public/storage/spares/image2.jpg
http://localhost/laravel/public/storage/spares/image3.jpg

**Modifier **

Envoi des dernières données modifiées des fichiers à afficher 

$docs = File::files('storage/document');
$lastmodified = [];
foreach ($docs as $key => $value) {
   $docs[$key] = asset($value);
   $lastmodified[$key] = File::lastmodified($value);
}
return view('stock.document',compact('docs','lastmodified'));

Est-ce correct 

4
Daniel Euchar

Qu'en est-il de Storage::url? Cela fonctionne même pour le stockage local.

Vous pouvez trouver plus ici: https://laravel.com/docs/5.4/filesystem#file-urls

Si vous voulez renvoyer tous les URL des fichiers du répertoire, vous pouvez faire quelque chose comme ceci:

return collect(Storage::files($directory))->map(function($file) {
    return Storage::url($file);
})

N'oubliez pas d'injecter le \Illuminate\Filesystem\FilesystemManager à la place de la façade Storage si vous recherchez un chemin non façade.

Modifier:

Il y a 2 (ou plus) moyens de traiter les dates modifiées:

Passe les fichiers à la vue.

| ous pouvez passer votre Storage::files($directory) directement à la vue puis, dans votre modèle, utilisez les éléments suivants:

// controller:

return view('view', ['files' => Storage::files($directory)]);

// template:

@foreach($files as $file)
   {{ Storage::url($file) }} - {{ $file->lastModified }} // I'm not sure about lastModified property, but you get the point
@endforeach

Retourne un tableau:

return collect(Storage::files($directory))->map(function($file) {
     return [
         'file' => Storage::url($file),
         'modified' => $file->lastModified // or something like this
     ]
})->toArray()
6
Jakub Kratina

Vous devez d’abord créer le lien symbolique de votre répertoire public/storage vers votre répertoire storage/app/public pour pouvoir accéder aux fichiers. Vous pouvez le faire avec:

php artisan storage:link

Vous pouvez alors stocker vos documents avec:

Storage::putFile('spares', $file);

Et y accéder comme un atout avec:

asset('storage/spares/filename.ext');

Découvrez la documentation sur le disque public

6
Eric Tucker

Eh bien, j'ai trouvé la solution, au lieu de chercher dans le stockage 

$ docs = Stockage: fichiers ('public/spares');

nous pouvons rechercher le lien symbolique

$ docs = File: files ('storage/spares');

puis exécutez-le via la fonction asset () pour obtenir l'URL publique. Y a-t-il une meilleure solution? 

0
Daniel Euchar