Scaricare file zip in Laravel
In questo articolo vedremo come creare un file zip e far direttamente il download in Laravel.
Solo che, in questo caso specifico, i file li prenderemo eseguendo una query su db.
Dalla tabella prenderemo i vari nomi dei files, che stanno tutti dentro la stessa cartella, e se esistono li aggiungeremo al file zip.
La query la faccio con una Stored Procedure, ma non cambia molto.
Il nome del file si trova nella colonna docl_nome (sostituitela col la vostra).
Ecco il codice:
namespace App\Http\Controllers;
use Illuminate\Database\QueryException;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use ZipArchive;
class DownloadDocumenti extends Controller {
public function docLavoro($lavoroId) {
try {
$filePath = public_path('files');
$zipFilePath = public_path('zip_files');
$fileName = date('Ymd') . '_file.zip';
$zipFile = "{$zipFilePath}/{$fileName}";
$query = DB::select('CALL get_docs_lavoro(?)', array($lavoroId));
$zip = new ZipArchive();
if ($zip->open($zipFile, ZipArchive::CREATE | \ZipArchive::OVERWRITE)) {
foreach ($query as $row) {
$fileNome = $row->docl_nome;
if (!empty($fileNome)) {
if (file_exists($filePath . '/' . $fileNome)) {
$zip->addFile($filePath . '/' . $fileNome, $row->docl_nome);
}
}
}
$zip->close();
} else {
return response()->json(array(
"res" => "ko",
"message" => "Si è verificato un errore"
));
}
return response()->download($zipFile);
} catch (\Exception $ex) {
return response()->json(array(
"res" => "ko",
"message" => $ex->getMessage()
));
}
}
}
La cartella zip_files è dove verranno creati i file zip; io non li cancelllo, vedete voi se volete aggiungere anche questa funzione.
Enjoy!
php laravel zip ziparchive
Commentami!