nodejs http file server serving file for download
Objective: Create a node js http server accepting incoming request and respond with a file for download. If the request querys for a specific file, respond with that file instead.
Solution: Include http, url and fs module. http for creating the http server, url for getting query parameter from the url, and fs for reading the file into a stream.The key is to set the response header to a 'Content-disposition', 'attachment; filename=theDocument.txt'
[code language=”javascript”]
var http = require(‘http’),
url = require(‘url’),
fs = require(‘fs’);
//create the http server listening on port 3333
http.createServer(function (req, res) {
var query = url.parse(req.url, true).query;
if (typeof query.file === ‘undefined’) {
//specify Content will be an attachment
res.setHeader(‘Content-disposition’, ‘attachment; filename=theDocument.txt’);
res.setHeader(‘Content-type’, ‘text/plain’);
res.end("Hello, here is a file for you!");
} else {
//read the image using fs and send the image content back in the response
fs.readFile(‘/path/to/a/file/directory/’ + query.file, function (err, content) {
if (err) {
res.writeHead(400, {‘Content-type’:’text/html’})
console.log(err);
res.end("No such file");
} else {
//specify Content will be an attachment
res.setHeader(‘Content-disposition’, ‘attachment; filename=’+query.file);
res.end(content);
}
});
}
}).listen(3333);
console.log("Server running at http://localhost:3333/");
[/code]
Download the file from the server on a browser.
http://localhost:3333/
http://localhost:3333/?file=afile.txt
Search within Codexpedia
Search the entire web