Laravel 10/9 download file from url to storage; Through this tutorial, i am going to show you how to download or display files from public storage folder in laravel apps.
Laravel 10/9 Download File From URL to Public Storage Folder
Follow the below steps to easily download files from public stroage folder:
Steps 1: Routes
To add the following routes on web.php file. So go to routes folder and open web.php file then update the following routes as follow:
use App\Http\Controllers\FileController; Route::get('view', [FileController::class, 'index']); Route::get('get/{filename}', [FileController::class, 'getfile']);
Step 2: Create Controller File
Go to app/HTTP/controllers and create controller file named FileController.php. Then update the following methods as follow:
function getFile($filename){ $file=Storage::disk('public')->get($filename); return (new Response($file, 200)) ->header('Content-Type', 'image/jpeg'); }
The above code will download files from public storage by giving the file name and return a response with correct content type.
If you want to display files on blade views, so you can update the following methods into your controller file:
$files = Storage::files("public"); $images=array(); foreach ($files as $key => $value) { $value= str_replace("public/","",$value); array_push($images,$value); } return view('show', ['images' => $images]);
To gets the image files from the public storage folder and extract the name of these files and you pass them to your view.
Step 3: Create Blade View
Go to resources\view
folder. And create one blade view file named show.blade.php. Then update the following code into it:
@foreach($images as $image) <div> <img src="{{route('getfile', $image)}}" class="img-responsive" /> </div> @endforeach
In Laravel 5,6,7,8,9 you can do this for a local file to download it:
return response()->download('path/to/file/image.jpg');
There’s no magic, you should download external image using copy()
function, then send it to user in the response:
$filename = 'temp-image.jpg'; $tempImage = tempnam(sys_get_temp_dir(), $filename); copy('https://my-cdn.com/files/image.jpg', $tempImage); return response()->download($tempImage, $filename);
Note that, if you are getting the following errors in laravel apps, when you are working with laravel files or storage:
1: “class ‘app\http\controllers\file’ not found”.
Import File
in your controller file as follow:
use File;
2: “class ‘app\http\controllers\response’ not found”.
Import Response
in your controller file as follow:
use Response;
3: “class ‘app\http\controllers\storage’ not found”.
Import Storage
in your controller file as follow:
use Illuminate\Support\Facades\Storage;
Conclusion
In this tutorial, you have learned how to download files from public storage folder in laravel apps with example.
Be First to Comment