2012-12-15 17 views
5

È possibile ottenere i dati grezzi del file che si sta richiedendo, ma non riesco a far sì che il browser serva il file all'utente. Devo usare iframe?Download dei download da lavorare tra angularjs e express.js

//Client code 
    download_file: function (path, callback) { 
     $http.post('/download/client_file', {path:path}). 
      success(function(data, status, headers, config) { 
       console.log(data); //this contains the raw data of the res.download 
            //from the server. 
      }); 
    } 

    //server code 
    res.download(file); // the path is proper 
+0

Funziona meglio se si esegue un HTTP GET? (alias emulare cosa succederà se l'utente dovesse fare clic su un collegamento al file) –

+0

Non importa se ho usato GET o POST, non avevo proprio un oggetto dati di forma. –

risposta

2

Ho usato il codice qui sotto nel mio file di servizio per il download di elementi e ha funzionato benissimo. L'ho avuta da http://filamentgroup.com/lab/jquery_plugin_for_requesting_ajax_like_file_downloads/

$('<form action="'+ url +'" method="'+ ('post') +'">'+inputs+'</form>') 
       .appendTo('body').submit().remove(); 
+1

Vorrei +2 questo se potessi. Soluzione eccezionale Una cosa da chiarire in questa risposta è che 'input' potrebbe assomigliare a questo:' 'dove' mydata' è un oggetto da il tuo '$ scope '. Guarda il mio esempio completo sul mio blog: http://jessemon.blogspot.com/2013/11/download-data-from-angular-nggrid-as-csv.html – Jess

+0

Mi sto imbattendo in questo stesso problema - Ho un controller ciò sta facendo un $ http.put() alla mia app principale.js. La risposta ai dati che ottengo è anche l'output non elaborato del mio file .csv e la sostituzione con quello sopra non mi dà "Errore di riferimento: $ non è definito" c'è qualcosa che mi manca? – MonsterWimp757

+1

@ MonsterWimp757 Se si desidera utilizzare $ controllare se è stato caricato jquery prima angolare in index.html – Eric

0

A seconda del tipo di file, e come le intestazioni sono impostati su di esso, si può trovare di gran lunga più semplice per chiamare semplicemente location.href="uriString"; dai vostri JS. Il file dovrebbe essere scaricato immediatamente, utilizzando la finestra in cui ci si trova già. Se si tratta di dati JSON o di testo, potrebbe essere necessario modificare le intestazioni per renderlo scaricabile anziché eseguire il rendering in linea ... ("content-disposition: attachment", forse. ..)