Laravel 11 Download File From URL to Public Storage Folder

Laravel 11 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 11 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.

Recommended Laravel Tutorials

Leave a Comment