Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
11
rated 0 times [  14] [ 3]  / answers: 1 / hits: 54443  / 11 Years ago, wed, february 5, 2014, 12:00:00

Hello there I have been trying to send a file from node.js to the client.



My code works however when the client goes to the specified url (/helloworld/hello.js/test) it streams the file.



Accessing it from Google Chrome makes the file (.mp3) play in a player.



My goal is to have the client's browser download the file and ask the client where he wants to store it, not stream it on the website.



http.createServer(function(req, res) {
switch (req.url) {
case '/helloworld/hello.js/test':

var filePath = path.join(__dirname, '/files/output.mp3');
var stat = fileSystem.statSync(filePath);

res.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.on('open', function() {
// This just pipes the read stream to the response object (which goes to the client)
readStream.pipe(res);
});

readStream.on('error', function(err) {
res.end(err);
});
}
});

More From » html

 Answers
60

You need to set some header flags;



res.writeHead(200, {
'Content-Type': 'audio/mpeg',
'Content-Length': stat.size,
'Content-Disposition': 'attachment; filename=your_file_name'
});


For replacing streaming with download;



var file = fs.readFile(filePath, 'binary');

res.setHeader('Content-Length', stat.size);
res.setHeader('Content-Type', 'audio/mpeg');
res.setHeader('Content-Disposition', 'attachment; filename=your_file_name');
res.write(file, 'binary');
res.end();

[#72709] Tuesday, February 4, 2014, 11 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
josuea

Total Points: 609
Total Questions: 121
Total Answers: 104

Location: South Georgia
Member since Fri, Nov 13, 2020
4 Years ago
josuea questions
;