Search code examples
phplaravelzip

File does not exist while downloading Zip file in Laravel


I'm getting error as the "file does not exist" as folder does exist.

The file "../storage/app/public/bks/case_1/XsIbdGSJow7O3fhq9LyU.zip" does not exist

I have checked with Database field name zipname is not present but job_id is present. I'm not sure but do we have to have field name as zipname present in Database for this to download.


public function downloadZip(Request $request)
    {            
            @$job_id = $request->job_id;
            @$filenames = DB::table('analytics_report')->where('job_id',$job_id)->get()->pluck('filename')->toArray();
            @$zipname = $request->job_id;
            $zip = new \ZipArchive;
            $zip->open($zipname, \ZipArchive::CREATE);
            foreach ($filenames as $filename){
                $zip->addFile($filename);
            }
            $zip->close;
            @$path = '../storage/app/public/bks/case_1/'.$zipname;
            
            return response()->download($path);

     }

Thanks!

Solution

  • You have a typo here $zip->close;. Should be $zip->close();

    Your code needs some checks before everything else.

    public function downloadZip(Request $request)
    {            
        if($request->has("job_id") === false) return;
    
        $job_id = $request->job_id;
        
        $filenames = DB::table('analytics_report')
                         ->where('job_id',$job_id)
                         ->get()
                         ->pluck('filename')
                         ->toArray();
    
        if (count($filenames) == 0) return;
        
        $zipname = $request->job_id;
        
        $zip = new \ZipArchive;
        $zip->open($zipname, \ZipArchive::CREATE);
        
        foreach ($filenames as $filename){
            $zip->addFile($filename);
        }
        
        $zip->close();
        
        $path = stprage_path('app/public/storage/bks/case_1/'.$zipname);
            
        return response()->download($path);
    
     }