2013-11-24 14 views
6

Sto usando il framework nodejs ed expressjs per scaricare un file "jsonFile.json" dal server.res.download() non funziona nel mio caso

Sto usando il seguente codice

res.get('/download', function(req, res) { 
     res.setHeader('Content-disposition', 'attachment; filename=jsonFile.json'); 
      res.setHeader('Content-Type', 'text/json'); 
      res.download(__dirname + 'jsonFile.json'); 
     } 
     }); 

Ma questo si traduce in una risposta con tutto il contenuto del file.

Mi aspettavo che il browser mi chiedesse di salvare il file nel disco locale.

Come si salva il file nel disco locale ???

risposta

16

Let espresso impostare le intestazioni corrette e basta fare questo:

res.get('/download', function(req, res) { 
    res.download(__dirname + 'jsonFile.json', 'jsonFile.json'); 
}); 

(doc)

EDIT: dal momento che si sta richiedendo /download tramite una chiamata AJAX, è necessario modificare la configurazione perché la maggior parte dei browser (tutti?) non mostrerà una finestra di dialogo di download in quel caso.

Invece, è possibile creare una nuova finestra dal codice front-end per attivare la finestra di dialogo:

window.open('/download?foo=bar&xxx=yyy'); 
+0

stesso stato .. :( – codeofnode

+0

anche se rimuovo il '/' nel nome del percorso .. ottengo 404 – codeofnode

+0

sì ho rimosso le intestazioni e il risultato è lo stesso e ancora non sto ottenendo il risultato previsto. chiedere di salvare file su disco, – codeofnode

0

solo per confermare quello che ha detto @ Robert,

perché questa cosa ha trasformato la mia testa per due giorni , invece di utilizzare una chiamata AJAX, aprire una nuova finestra con la vostra posizione richiesta AJAX, per esempio:

window.open("http://yourserver.com/api/link?a=3&b=4") 

speranza che questo aiuta qualcuno.

Problemi correlati