2012-10-28 12 views
26

Desidero trasmettere il contenuto ai client che è possibile archiviare in db, che avrebbero salvato come file.File di flusso nel nodo/express al client

Ovviamente ris.download farebbe bene il lavoro, ma nessuna delle funzioni di risposta. * Accetta un flusso, solo percorsi di file.

Ho dato un'occhiata a res.download impl e semplicemente imposta l'intestazione Content-Disposition e quindi un sendfile.

Così ho potuto ottenere questo utilizzando questo post come guida. Node.js: pipe stream to response freezes over HTTPS

Ma sembra che mi sarei perso tutti gli aspetti del wrapping che le prestazioni.

Mi manca qualcosa qui o devo solo fare la pipa e non preoccuparti di ciò - qual è la migliore pratica qui?

Attualmente creazione di file temporanei in modo da poter utilizzare solo ris.download per ora.

+0

provare questo metodo http://stackoverflow.com/questions/10207762/how-to-use-request-or-http-module-to-read-gzip-page-into-a- string/10603029 # 10603029 –

risposta

63

È possibile eseguire lo streaming direttamente sull'oggetto risposta (è un flusso).

Un flusso di file di base sarebbe simile a questo.

function(req, res, next) { 
    if(req.url==="somethingorAnother") { 
    res.setHeader("content-type", "some/type"); 
    fs.createReadStream("./toSomeFile").pipe(res); 
    } else { 
    next(); // not our concern, pass along to next middleware function 
    } 
} 

Questo si prenderà cura di legare data e end eventi.

+2

@Tim si dovrebbe contrassegnare questo come risposta se ha funzionato per voi –

+0

Dato gli upvotes sembra funzionare per molti e che include me. Grazie! – jlh

+1

Ricorda di chiamare 'next' se' req.url! == "somethingorAltro" ' – Carlos

1

Assicurarsi che la richiesta AJAX del client abbia un set "responseType" appropriato. per esempio come

$http({ 
    method :'GET', 
    url : http://url, 
    params:{}, 
    responseType: 'arraybuffer' 
}).success() 
Problemi correlati