webentwicklung-frage-antwort-db.com.de

Im Laravel 5, wie kann ich eine Liste aller Dateien in einem öffentlichen Ordner erhalten?

Ich möchte automatisch eine Liste aller Bilder in meinem öffentlichen Ordner erstellen, aber ich kann anscheinend keine Objekte finden, die mir dabei helfen könnten.

Die Storage-Klasse scheint ein guter Kandidat für den Job zu sein, aber ich kann nur Dateien innerhalb des Speicherordners durchsuchen, der sich außerhalb des öffentlichen Ordners befindet.

14
kant312

Sie können eine andere Festplatte für die Speicherklasse erstellen. Dies wäre meiner Meinung nach die beste Lösung für Sie.

Fügen Sie in config/filesystems.php im Festplatten-Array den gewünschten Ordner hinzu. Der Ordner public in diesem Fall.

    'disks' => [

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

    'public' => [
        'driver' => 'local',
        'root'   => public_path(),
    ],

    's3' => '....'

Dann können Sie die Klasse Storage verwenden, um auf folgende Weise in Ihrem öffentlichen Ordner zu arbeiten:

$exists = Storage::disk('public')->exists('file.jpg');

Die Variable $ exists gibt an, ob file.jpg im Ordner public vorhanden ist, da die storage-Festplatte 'public' auf den öffentlichen Ordner des Projekts verweist.

Sie können alle Session -Methoden aus der Dokumentation mit Ihrer benutzerdefinierten Festplatte verwenden. Fügen Sie einfach den Datenträger ("public") hinzu.

 Storage::disk('public')-> // any method you want from 

http://laravel.com/docs/5.0/filesystem#basic-usage

24
igs013

Storage::disk('local')->files('optional_dir_name');

oder

array_filter(Storage::disk('local')->files(), function ($item) {return strpos($item, 'png');});

Beachten Sie, dass laravel disk files() und allfiles(). allfiles rekursiv ist.

20
Tarek Adam

Erwägen Sie die Verwendung von glob. Keine Notwendigkeit, Barebones PHP mit Hilfsklassen/Methoden in Laravel 5 zu komplizieren.

<?php
foreach (glob("/location/for/public/images/*.png") as $filename) {
    echo "$filename size " . filesize($filename) . "\n";
}
?>
9
drmarvelous

Um alle Bilder in Ihrem öffentlichen Verzeichnis aufzulisten, versuchen Sie Folgendes: Siehe hier btw http://php.net/manual/en/class.splfileinfo.php

  function getImageRelativePathsWfilenames(){

      $result = [];

    $dirs = File::directories(public_path());

    foreach($dirs as $dir){
      var_dump($dir); //actually string: /home/mylinuxiser/myproject/public"
      $files = File::files($dir);
      foreach($files as $f){
        var_dump($f); //actually object SplFileInfo
        //object(Symfony\Component\Finder\SplFileInfo)#628 (4) {
        //["relativePath":"Symfony\Component\Finder\SplFileInfo":private]=>
        //string(0) ""
        //["relativePathname":"Symfony\Component\Finder\SplFileInfo":private]=>
        //string(14) "text1_logo.png"
        //["pathName":"SplFileInfo":private]=>
        //string(82) "/home/mylinuxiser/myproject/public/img/text1_logo.png"
        //["fileName":"SplFileInfo":private]=>
        //string(14) "text1_logo.png"
        //}

        if(ends_with($f, ['.png', '.jpg', '.jpeg', '.gif'])){
          $result[] = $f->getRelativePathname(); //prefix your public folder here if you want
        }
      }
    }
    return $result; //will be in this case ['img/text1_logo.png']
  }
0
Toskan

Um alle Dateien im Verzeichnis aufzulisten, verwenden Sie diese

  $dir_path = public_path() . '/dirname';
   $dir = new DirectoryIterator($dir_path);
  foreach ($dir as $fileinfo) {
    if (!$fileinfo->isDot()) {

    }
    else {

    }
}
0
Adnan Rasheed

Verwenden Sie den folgenden Code, um alle Unterverzeichnisse eines bestimmten Ordners im öffentlichen Ordner abzurufen. Wenn einige auf den Ordner klicken, werden die Dateien in jedem Ordner aufgelistet.

Controller-Datei

 public function index() {

    try {

        $dirNames = array();  
        $this->folderPath = 'export'.DS.str_replace( '.', '_', $this->getCurrentShop->getCurrentShop()->shopify_domain ).DS.'exported_files';
        $getAllDirs = File::directories( public_path( $this->folderPath ) );

        foreach( $getAllDirs as $dir ) {

            $dirNames[] = basename($dir);

        }
        return view('backups/listfolders', compact('dirNames'));

    } catch ( Exception $ex ) {
        Log::error( $ex->getMessage() );
    }



}

public function getFiles( $directoryName ) {

    try {
        $filesArr = array();
        $this->folderPath = 'export'.DS.str_replace( '.', '_', $this->getCurrentShop->getCurrentShop()->shopify_domain ).DS.'exported_files'. DS . $directoryName;
        $folderPth = public_path( $this->folderPath );
        $files = File::allFiles( $folderPth ); 
        $replaceDocPath = str_replace( public_path(),'',$this->folderPath );

        foreach( $files as $file ) {

            $filesArr[] = array( 'fileName' => $file->getRelativePathname(), 'fileUrl' => url($replaceDocPath.DS.$file->getRelativePathname()) );

        }

        return view('backups/listfiles', compact('filesArr'));

    } catch (Exception $ex) {
        Log::error( $ex->getMessage() );
    }


}

Route (Web.php)

Route::resource('displaybackups', 'Displaybackups\BackupController')->only([ 'index', 'show']);

Route :: get ('get-files/{directoryName}', 'Displaybackups\BackupController @ getFiles');

Dateien anzeigen - Ordner auflisten

@foreach( $dirNames as $dirName)
    <div class="col-lg-3 col-md-3 col-sm-4 align-center">
        <a href="get-files/{{$dirName}}" class="btn btn-light folder-wrap" role="button">
            <span class="glyphicon glyphicon-folder-open folderIcons"></span>
            {{ $dirName }}
        </a>
    </div>
@endforeach

Anzeigen - Dateien auflisten

@foreach( $filesArr as $fileArr)
    <div class="col-lg-2 col-md-3 col-sm-4">
        <a href="{{ $fileArr['fileUrl'] }}" class="waves-effect waves-light btn green folder-wrap">
            <span class="glyphicon glyphicon-file folderIcons"></span>
            <span class="file-name">{{ $fileArr['fileName'] }}</span>
        </a>
    </div>
@endforeach
0
Liz Eipe C