2015-12-31 17 views
9

Ho fatto ricerche per un po 'di tempo e non riesco a trovare una risposta chiara/un modo per risolvere il mio problema.Download di un file dal corpo di risposta http

La situazione è questa: sto inviando una richiesta di posta a un server. La risposta contiene il file binario di un file pcap nel suo corpo. Come faccio a scaricarlo come file.

Il mio codice semplificato:

... 
this.downloadPcap = function(timestamp){ 
    var start = timestamp-10; 
    var end = timestamp+10; 
    var requestData = {"start": start, "end": end}; 
    $http.post(serverUrl, requestData); 
} 

Questo viene attivato con un click, in cui ottengo il timestamp di qualche evento, e il server crea un file PCAP da 10 secondi prima e dopo l'evento esatto.

Ricevo una risposta con un lungo binario. anche:

Content-Length: 134772

Content-Type: application/pcap

Ora mi è stato detto che se l'intestazione sarà in questo modo, il browser si avvia automaticamente il download la risposta come un file. Non è così.

Quindi ho letto molto poco su Blob e FileSaver, ma mi sembra che ci debba essere un modo più semplice per scaricare i file che vengono creati dinamicamente.

Qualcuno può indicarmi una direzione? Non c'è un modo più semplice di includere più librerie?

Grazie in anticipo

+0

Prova questa risposta http://stackoverflow.com/questions/3665115/create-a-file-in-memory-for-user-to-download-not-through-server#answer-18197341 – jcubic

+0

Hai provato ad aggiungere l'intestazione Content-Disposition? 'Content-Disposition: attachment; nomefile = "testfile.someext" ' – marekful

+0

Avrei suggerito un modulo con un iframe ma dal momento post angolare json invece dei dati del modulo, dovrai usare il metodo ajax -> blob url non così facile. – Musa

risposta

2

castoro mi indicò la risposta qui: https://stackoverflow.com/a/20904398/5459561

funziona perfettamente! Sto scaricando personalmente un PCAP e la codifica è diversa, ma tutto il resto funziona!

$ servizio http restituisce una promessa che ha due metodi di callback come mostrato di seguito.

$http({method: 'GET', url: '/someUrl'}). 
    success(function(data, status, headers, config) { 
    var anchor = angular.element('<a/>'); 
    anchor.attr({ 
     href: 'data:attachment/csv;charset=utf-8,' + encodeURI(data), 
     target: '_blank', 
     download: 'filename.csv' 
    })[0].click(); 

    }). 
    error(function(data, status, headers, config) { 
    // if there's an error you should see it here 
    }); 
Problemi correlati