Attualmente, in October CMS, non è possibile farsi ritornare un file in download come response di un AJAX handler, per farci scaricare un documento o quant'altro.
Possiamo però raggiungere lo scopo aggirando il problema sfruttando un paio di tecniche diverse anche se concettualmente e praticamente simili.
Opzione 1 - usiamo una route
Nel file routes.php del nostro plugin inseriamo una nuova route che risponda con il download del file che ci interessa
Route::get('scarica-file', function(){
$pathToFile = storage_path('il-file.pdf');
$fileName = 'il-mio-file.pdf';
$headers = [
'Content-Type' => 'application/pdf'
];
return Response::download($pathToFile, $fileName, $headers);
});
Chiamando la url www.dominio.it/scarica-file verrà automaticamente fatto partire il download del file il-file.pdf
Ricordo che storage_path è un helper disponibile che ci ritorna un percorso assoluto alla cartella storage, possiamo utilizzare l'helper storage_path per costruire un percorso assoluto ad un file relativamente alla directory storage. Puoi vedere tutti gli helpers disponibili su questa pagina
Opzione 2 - usiamo una pagina
In modo analogo al precedente creiamo una pagina che ritorni il file di nostro interesse quando richiamata.
title = "Scarica il file"
url = "/scarica-file"
is_hidden = 0
==
function onStart()
{
$pathToFile = storage_path('il-file.pdf');
$fileName = 'il-mio-file.pdf';
$headers = [
'Content-Type' => 'application/pdf'
];
return Response::download($pathToFile, $fileName, $headers);
}
==
Esattamente come nel caso precedente chiamando la url www.dominio.it/scarica-file verrà automaticamente fatto partire il download del file il-file.pdf
Ora non ci resta che vedere la action che verrà chiamata dall'AJAX handler che sarà responsabile di redirigere il browser alla url appena predisposta per lo scarico del file.
function onScaricaFile()
{
return Redirect::to('scarica-file');
}
Ora tramite il nostro bottone faremo partire il download del file correttamente.
<button
class="btn btn-default oc-icon-download"
data-request="onScaricaFile">
Scarica il file
</button>
Per approfondimenti sugli AJAX Handlers visita questa pagina
Scaricate responsabilmente ;)
Lunga vita e prosperità