2012-10-28 22 views
26

İçeriği, dosyalar olarak kaydedebilecekleri db'de saklanan istemcilere akışta yayınlamak istiyorum.Düğüm içinde istemciye/alıcıya aktarım dosyaları

Açıkçası res.download, işi güzel bir şekilde yapabilirdi, ancak yanıtın hiçbiri. * Işlevler yalnızca dosya yollarını, bir akışı kabul eder.

Res.download impl'ye bir göz attım ve Content-Disposition üstbilgisini ve sonra bir gönderme dosyasını ayarlıyor.

Bu yüzden bu yazıyı bir kılavuz olarak kullanarak başarabilirim. Node.js: pipe stream to response freezes over HTTPS

Ancak, performans gösteren tüm sarma yönlerini gözden kaçırır gibi görünüyor.

Burada bir şeyi kaçırıyor muyum yoksa sadece boruyu yapmalıyım ve endişelenmeyin - burada en iyi uygulama nedir?

Halihazırda geçici dosyalar oluşturarak, şimdilik res.download'u şimdi kullanabiliyorum.

+0

gibi örneğin bu yöntemi http://stackoverflow.com/questions/10207762/how-to-use-request-or-http-module-to-read-gzip-page-into-a- deneyin string/10603029 # 10603029 –

cevap

63

Doğrudan yanıt nesnesine akıtabilirsiniz (bu bir Akıştır).

Basit bir dosya akışı böyle bir şeye benziyordu.

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 
    } 
} 

Bu

data ve end olaylara bağlanmasını ilgilenir.

+2

@Tim sizin için çalışmışsa, bunu yanıt olarak işaretlemelisiniz –

+0

Birçok vesile olduğu gözüküyor ve beni de içeriyor. Teşekkürler! – jlh

+1

"eğer", "req.url! ==" bir şey var mı? – Carlos

1

İstemciden AJAX isteğinizin uygun bir 'responseType' kümesi olduğundan emin olun.

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