Laravel 9 Download File From URL to Public Storage Folder

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

Recommended Laravel Tutorials

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *