Réponses:
Voici un exemple de programme qui enverra myfile.mp3 en le diffusant à partir du disque (c'est-à-dire qu'il ne lit pas le fichier entier en mémoire avant d'envoyer le fichier). Le serveur écoute sur le port 2000.
[Mise à jour] Comme mentionné par @Aftershock dans les commentaires, a util.pumpdisparu et a été remplacé par une méthode sur le prototype Stream appelée pipe; le code ci-dessous reflète cela.
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);
Tiré de http://elegantcode.com/2011/04/06/taking-baby-steps-with-node-js-pumping-data-between-streams/
Vous devez utiliser Stream pour envoyer un fichier (archive) dans une réponse, de plus, vous devez utiliser le type de contenu approprié dans votre en-tête de réponse.
Il existe un exemple de fonction qui le fait:
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");
}
});
}
}
Le but du champ Content-Type est de décrire suffisamment complètement les données contenues dans le corps pour que l'agent utilisateur récepteur puisse choisir un agent ou un mécanisme approprié pour présenter les données à l'utilisateur, ou traiter les données d'une manière appropriée.
"application / octet-stream" est défini comme "données binaires arbitraires" dans la RFC 2046, le but de ce type de contenu est d'être enregistré sur le disque - c'est ce dont vous avez vraiment besoin.
"filename = [nom du fichier]" spécifie le nom du fichier qui sera téléchargé.
Pour plus d'informations, consultez cette rubrique stackoverflow .