Saturday, September 21, 2024
Google search engine
HomeLanguagesLaravel 9 Download File From URL to Public Storage Folder

Laravel 9 Download File From URL to Public Storage Folder

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

Dominic Rubhabha-Wardslaus
Dominic Rubhabha-Wardslaushttp://wardslaus.com
infosec,malicious & dos attacks generator, boot rom exploit philanthropist , wild hacker , game developer,
RELATED ARTICLES

Most Popular

Recent Comments