Reputation: 1337
How to send a response if the file size exceeds in the multer in the file upload.The app crashes when the file uploaded the is greater than the limit. I tried to check the req.file.size with uploadFileSize , unfortunately it doesn't work.
var uploadOptions = multer({
dest: uploadDir,
limits: {fileSize: uploadFileSize},
}).single('file');
app.post('/upload', function (req, res) {
uploadOptions(req, res, function (err) {
var temp = req.file.path;
var file = uploadDir + req.file.originalname;
var source = fs.createReadStream(temp);
var destination = fs.createWriteStream(file);
source.pipe(destination);
fs.unlink(temp);
source.on('end', function () {
var result = {
'status': 'sucess',
'file': file
};
fs.chmod(file, 0777);
res.send(result);
});
source.on('error', function (err) {
var result = {
'status': 'Fail',
'error': err
};
res.send(result);
});
if (err) {
var result = {
'status': 'Fail',
'error': err
};
return res.end(result);
}
});
});
Upvotes: 1
Views: 3702
Reputation: 541
The callback of uploadOptions returns code :'LIMIT_FILE_SIZE' in err object. You can handle by that. Also you should check err before starting to process file.
uploadOptions(req, res, function (err) {
if (err) {
if (err.code === 'LIMIT_FILE_SIZE') {
// 'File too large'
} else {
var result = {
'status': 'Fail',
'error': err
};
res.end(result);
}
} else {
var temp = req.file.path;
var file = uploadDir + req.file.originalname;
var source = fs.createReadStream(temp);
var destination = fs.createWriteStream(file);
source.pipe(destination);
fs.unlink(temp);
source.on('end', function () {
var result = {
'status': 'sucess',
'file': file
};
fs.chmod(file, 0777);
res.send(result);
});
source.on('error', function (err) {
var result = {
'status': 'Fail',
'error': err
};
res.send(result);
});
}
});
Upvotes: 1