File Too Large Error Handling Nodejs Express Multer

10,259

Solution 1

try rewrite like this (remove "upload" first):

app.post('/', function (req, res) {
  upload(req, res, function (err) {
    if (err) {
        console.log("cs " + err);
      return
    }

    res.end('You new avatar is uploaded')
    // Everything went fine
  })

Solution 2

I've created an Express handler in the end of server.js file.

  1. place handler function after all app.use(), check if this error from multer and send data you needed. My code sends LIMIT_FILE_SIZE string.
app.use(() => (err: Error, req: Request, res: Response, next: NextFunction) => {
    if (err instanceof multer.MulterError) {
        return res.status(418).send(err.code);
    }
});

Docs: http://expressjs.com/en/guide/error-handling.html#error-handling

Share:
10,259
sssaini
Author by

sssaini

Updated on June 17, 2022

Comments

  • sssaini
    sssaini almost 2 years

    I am using multer with ExpressJS. I want to limit file uploads to 0.5 MB.

    var limits = { fileSize: 0.5 * 1024 * 1024 };
    
    var upload = multer({ dest: './public/uploads/', limits: limits
     }).single('upl')
    
     app.post('/',upload, function (req, res) {
      upload(req, res, function (err) {
        if (err) {
                console.log("cs " + err);
          return
        }
    
               res.end('You new avatar is uploaded')
        // Everything went fine
      })
    })
    

    When the file is under 0.5 MB I can see 'You new avatar is uploaded' but when it is over I get,

    Error: File too large
       at makeError (C:\Users\Owner\Desktop\nodejs projects\dummy\node_modules\multer\lib\make-error.js:12:13)
       at abortWithCode (C:\Users\Owner\Desktop\nodejs projects\dummy\node_modules\multer\lib\make-middleware.js:77:22)
       at FileStream.<anonymous> (C:\Users\Owner\Desktop\nodejs projects\dummy\node_modules\multer\lib\make-middleware.js:139:11)
       at emitNone (events.js:80:13)
       at FileStream.emit (events.js:179:7)
       at PartStream.onData (C:\Users\Owner\Desktop\nodejs projects\dummy\node_modules\busboy\lib\types\multipart.js:220:18)
       at emitOne (events.js:90:13)
       at PartStream.emit (events.js:182:7)
       at readableAddChunk (_stream_readable.js:153:18)
       at PartStream.Readable.push (_stream_readable.js:111:10)
    

    Obviously I would never want the end user to see this. How can I handle this properly?

  • sssaini
    sssaini almost 8 years
    But then how will I introduce the size limit?
  • KibGzr
    KibGzr almost 8 years
    write like your code just remove upload middleware in app.post('/')