Yanıtlar:
İşte myfile.mp3'ü diskten akışa alarak gönderecek örnek bir program (yani, dosyayı göndermeden önce tüm dosyayı belleğe okumaz). Sunucu, 2000 numaralı bağlantı noktasını dinler.
[Güncelleme] Yorumlarda @Aftershock tarafından belirtildiği gibi util.pumpgitti ve Stream prototipinde adı verilen bir yöntemle değiştirildi pipe; aşağıdaki kod bunu yansıtmaktadır.
var http = require('http'),
fileSystem = require('fs'),
path = require('path');
http.createServer(function(request, response) {
var filePath = path.join(__dirname, 'myfile.mp3');
var stat = fileSystem.statSync(filePath);
response.writeHead(200, {
'Content-Type': 'audio/mpeg',
'Content-Length': stat.size
});
var readStream = fileSystem.createReadStream(filePath);
// We replaced all the event handlers with a simple call to readStream.pipe()
readStream.pipe(response);
})
.listen(2000);
Alındığı http://elegantcode.com/2011/04/06/taking-baby-steps-with-node-js-pumping-data-between-streams/
Bir yanıtta dosya (arşiv) göndermek için Akış kullanmanız gerekir, yanıt başlığınızda uygun İçerik türünü kullanmanız da gerekir.
Bunu yapan örnek bir fonksiyon var:
const fs = require('fs');
// Where fileName is name of the file and response is Node.js Reponse.
responseFile = (fileName, response) => {
const filePath = "/path/to/archive.rar" // or any file format
// Check if file specified by the filePath exists
fs.exists(filePath, function(exists){
if (exists) {
// Content-type is very interesting part that guarantee that
// Web browser will handle response in an appropriate manner.
response.writeHead(200, {
"Content-Type": "application/octet-stream",
"Content-Disposition": "attachment; filename=" + fileName
});
fs.createReadStream(filePath).pipe(response);
} else {
response.writeHead(400, {"Content-Type": "text/plain"});
response.end("ERROR File does not exist");
}
});
}
}
İçerik Türü alanının amacı, alıcı kullanıcı aracısının verileri kullanıcıya sunmak için uygun bir aracı veya mekanizmayı seçebilmesi veya başka bir şekilde verileri uygun bir şekilde ele alabilmesi için vücutta bulunan verileri yeterince tam olarak açıklamaktır.
"uygulama / sekizli akışı", RFC 2046'da "rastgele ikili veri" olarak tanımlanır, bu içerik türünün amacı diske kaydedilmektir - gerçekten ihtiyacınız olan şey budur.
"dosyaadı = [dosyanın adı]" indirilecek dosyanın adını belirtir.
Daha fazla bilgi için lütfen bu yığın akışı konusuna bakın .