I am trying to upoad and download images to the server via Node.js and I am using the below code:
var http = require('http'),
path = require('path'),
os = require('os'),
fs= require('fs'),url = require('url');
var Busboy = require('busboy');
http.createServer(function(req, res) {
if (req.method === 'POST') {
var busboy = new Busboy({ headers: req.headers });
busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
var saveTo = ".\\Images\\"+filename;
file.pipe(fs.createWriteStream(saveTo));
});
busboy.on('finish', function() {
res.writeHead(200, { 'Connection': 'close' });
res.end("That's all folks!");
});
return req.pipe(busboy);
}
else{
var request = url.parse(req.url, true);
console.log(request);
var action = request.pathname;
console.log(action);
if (action !== '/') {
var img = fs.readFileSync('.'+action);
res.writeHead(200, {'Content-Type': 'image/gif' });
res.end(img, 'binary');
} else {
res.writeHead(200, {'Content-Type': 'text/plain' });
res.end('Hello World \n');
}
}
res.writeHead(404);
res.end();
}).listen(8082, function() {
console.log('Listening for requests');
});
When I try to get the image from this server using HTTP GET at http://localhost:8082/images/betty.jpg
, the request is fulfilled and the image is recieved but it also throws the error below:
^
fs.js:438
return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
^
Error: ENOENT, no such file or directory 'D:\ImageUploadService\favicon.ico'
at Object.fs.openSync (fs.js:438:18)
at Object.fs.readFileSync (fs.js:289:15)
at Server.<anonymous> (D:\ImageUploadService\service.js:27:20)
at Server.emit (events.js:98:17)
at HTTPParser.parser.onIning (http.js:2112:12)
at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:121:23
)
at Socket.socket.ondata (http.js:1970:22)
at TCP.onread (net.js:527:27) 'D:\ImageUploadService\favicon.ico'
at Object.fs.openSync (fs.js:438:18)
at Object.fs.readFileSync (fs.js:289:15)
at Server.<anonymous> (D:\ImageUploadService\service.js:27:20)
at Server.emit (events.js:98:17)
at HTTPParser.parser.onIning (http.js:2112:12)
at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:121:23
)
at Socket.socket.ondata (http.js:1970:22)
at TCP.onread (net.js:527:27)
It seems that it is looking for some favicon.ico. What could be the problem??
I am trying to upoad and download images to the server via Node.js and I am using the below code:
var http = require('http'),
path = require('path'),
os = require('os'),
fs= require('fs'),url = require('url');
var Busboy = require('busboy');
http.createServer(function(req, res) {
if (req.method === 'POST') {
var busboy = new Busboy({ headers: req.headers });
busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
var saveTo = ".\\Images\\"+filename;
file.pipe(fs.createWriteStream(saveTo));
});
busboy.on('finish', function() {
res.writeHead(200, { 'Connection': 'close' });
res.end("That's all folks!");
});
return req.pipe(busboy);
}
else{
var request = url.parse(req.url, true);
console.log(request);
var action = request.pathname;
console.log(action);
if (action !== '/') {
var img = fs.readFileSync('.'+action);
res.writeHead(200, {'Content-Type': 'image/gif' });
res.end(img, 'binary');
} else {
res.writeHead(200, {'Content-Type': 'text/plain' });
res.end('Hello World \n');
}
}
res.writeHead(404);
res.end();
}).listen(8082, function() {
console.log('Listening for requests');
});
When I try to get the image from this server using HTTP GET at http://localhost:8082/images/betty.jpg
, the request is fulfilled and the image is recieved but it also throws the error below:
^
fs.js:438
return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
^
Error: ENOENT, no such file or directory 'D:\ImageUploadService\favicon.ico'
at Object.fs.openSync (fs.js:438:18)
at Object.fs.readFileSync (fs.js:289:15)
at Server.<anonymous> (D:\ImageUploadService\service.js:27:20)
at Server.emit (events.js:98:17)
at HTTPParser.parser.onIning (http.js:2112:12)
at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:121:23
)
at Socket.socket.ondata (http.js:1970:22)
at TCP.onread (net.js:527:27) 'D:\ImageUploadService\favicon.ico'
at Object.fs.openSync (fs.js:438:18)
at Object.fs.readFileSync (fs.js:289:15)
at Server.<anonymous> (D:\ImageUploadService\service.js:27:20)
at Server.emit (events.js:98:17)
at HTTPParser.parser.onIning (http.js:2112:12)
at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:121:23
)
at Socket.socket.ondata (http.js:1970:22)
at TCP.onread (net.js:527:27)
It seems that it is looking for some favicon.ico. What could be the problem??
Share Improve this question asked Sep 27, 2014 at 0:06 writeToBhuwanwriteToBhuwan 3,28111 gold badges41 silver badges67 bronze badges1 Answer
Reset to default 8You need to check if the file exists with fs.existsSync(path)
before attempting to read it:
if (action !== '/' && fs.existsSync('.'+action)) {
var img = fs.readFileSync('.'+action);
res.writeHead(200, {'Content-Type': 'image/gif' });
res.end(img, 'binary');
} else {