Laravel 9 download file from URL to storage. In this tutorial, we will learn how to download or display files from public storage folders in laravel apps.
Laravel 9 Download File From URL to Public Storage Folder
Follow the below steps and easily download files from public stroage folder. And as well as display files on laravel blade views:
Steps 1: Routes
First of all, we need to add the following routes on web.php file. So navigate 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
Next, Navigate to app/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 we want to display files on blade views, so we can update the following methods into 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]);
The above code gets the image files from the public storage folder and extract the name of these files and we pass them to view.
Step 3: Create Blade View
Now, Navigate 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 we can do this for a local file to download it:
return response()->download('path/to/file/image.jpg');
There’s no magic, we 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 we are getting the following errors in laravel apps, when we are working with laravel files or storage:
1: “class ‘app\http\controllers\file’ not found”.
Import File
in controller file as follow:
use File;
2: “class ‘app\http\controllers\response’ not found”.
Import Response
in controller file as follow:
use Response;
3: “class ‘app\http\controllers\storage’ not found”.
Import Storage
in controller file as follow:
use Illuminate\Support\Facades\Storage;
Conclusion
In this tutorial, we have learned how to download files from public storage folder in laravel apps with example.
Recommended Laravel Tutorials