Search code examples
phplaravelfile-uploadlaravel-5.4php-7

Laravel Public url for storage files


I want to retrieve public url for all the files stored using

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

So, this is the issue I'm using

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

but it provides this output from laravel storage directory

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

how can I get the public link for the above

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

**Edit **

Sending last modified data of files to view

$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'));

Is this correct


Solution

  • What about Storage::url? It works even for local storage.

    You can find more here: https://laravel.com/docs/5.4/filesystem#file-urls

    If you want to return all files' urls from the directory, you can do something like this:

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

    Don't forget to inject the \Illuminate\Filesystem\FilesystemManager instead of the Storage facade if you are looking for a not-facade way.

    Edit:

    There are 2 (or more) ways how you can deal with modified date:

    Pass files to the view.

    |ou can pass your Storage::files($directory) directly to the view and then in your template use following:

    // 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
    

    Return an array:

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