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
Laravel's filesystem configuration file is located at config/filesystems.php . Within this file, you may configure all of your filesystem "disks". Each disk represents a particular storage driver and storage location.
Laravel 8.x < You can use the storage_path(); function to get storage folder path.
In Laravel 3, call path('storage'). In Laravel 4, use the storage_path() helper function. For Laravel 5. x, use $storage_path = storage_path().
First you have to create the symbolic link from your public/storage
directory to your storage/app/public
directory so you can access the files. You can do that with:
php artisan storage:link
So then you can store your documents with:
Storage::putFile('spares', $file);
And access them as an asset with:
asset('storage/spares/filename.ext');
Check out the documentation on the public disk
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()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With