Multer does not throw an error when limits: fileSize is exceeded and hangs
- Dominant language
- JavaScript
- Stars
- 12.1k
- Forks
- 1.1k
- Avg merge
- 8d 2h
- Merged PRs (30d)
- 21
Description
I have the following code to handle profile pic uploads. Everything works fine if under the limits: fileSize, but when fileSize is exceeded no error is thrown. Error handling based on https://github.com/expressjs/multer/issues/336. I have a custom disk storage engine. The problem with this is that I cannot send any error message or a response to react frontend.
```javascript
var storage = ProfileStorage({
square: true,
responsive: true,
greyscale: false,
quality: 60
});
var limits = {
//files: 1, // allow only 1 file per request
fileSize: 100 * 1024
};
var fileFilter = function(req, file, cb) {
var allowedMimes = ['image/jpeg', 'image/pjpeg', 'image/png', 'image/gif'];
if (_.includes(allowedMimes, file.mimetype)) {
cb(null, true);
} else {
cb(new Error('Invalid file type. Only jpg, png and gif image files are allowed.'));
}
};
var upload = multer({
storage: storage,
limits: limits,
fileFilter: fileFilter
});
```
The post method:
```javascript
var profileUpload = upload.single('Profiilikuva');
module.exports = app => {
app.post('/api/profile/save', requireLogin, (req, res) => {
console.log('Entered profile save');
profileUpload(req, res, (err) => {
console.log('Entered profile upload.');
if (err) {
console.log('Error from multer: ', err);
return res.status(400).send(err);
}
if (req.file) {
console.log('Stored file: ', req.file.filename); // Storage engine stores under random filename
}
const {firstName, lastName, email, address,
postalCode, descriptionText, lat, lng } = req.body;
req.user.profileCompleted = true;
req.user.firstName = firstName;
// some more of these...
req.user.save().then((user) => {
console.log('User saved');
return res.send(user);
}).catch(err => {
console.log('Error saving user. ', err);
return res.status(400).send('Error while saving user information');
});
});
});
};
```
Log output when uploading 75KB:
```
Entered profile save
_handleFile called. { fieldname: 'Profiilikuva',
originalname: '75KB.jpg',
encoding: '7bit',
mimetype: 'image/jpeg' }
Entered profile upload.
Stored file: 0b3dc28730ecc387115a03b3f860af20_lg.jpg
User saved
```
Log output when uploading 190KB:
```
Entered profile save
_handleFile called. { fieldname: 'Profiilikuva',
originalname: '190KB.jpg',
encoding: '7bit',
mimetype: 'image/jpeg' }
_removeFile called
```
Contributor guide
Assessment
This issue has not been assessed yet.