ArUn
ArUn

Reputation: 1337

How Handle File Size Exceeds Error in multer node.js

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

Answers (1)

garenyondem
garenyondem

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

Related Questions