Come usare gli AJAX handler per scaricare un file in October

Luca Benati

Vediamo come aggirare il problema sfruttando un paio di tecniche diverse.


Pubblicato da Luca Benati il 21 novembre 2019

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à

Ti interessa un argomento non trattato?