multer icon indicating copy to clipboard operation
multer copied to clipboard

MulterError: File too large when file size IS BELOW `fileSize`

Open zacharytyhacz opened this issue 2 years ago • 0 comments

I am having an issue where Multer is throwing a LIMIT_FILE_SIZE error code, when the uploaded file's size is below the given limits.fileSize bytes size.

Multer version:

"multer": "^1.4.5-lts.1",

My Multer setup code:

export const acceptFileUpload = (
    req: Express.Request,
    res: Express.Response,
    next: Express.NextFunction
) => {
    const maxFileSize = 10 * 1024 * 1024 // 10 MB

    const tempStorage = multer.diskStorage({
        destination: '/tmp',
        filename: (_, file, cb) => {
            const fileParts = file.originalname.split('.')
            const extension = fileParts[fileParts.length - 1]

            cb(null, newFileName(extension))
        }
    })

    const handleFile = multer({
        storage: tempStorage,
        limits: {
            fileSize: maxFileSize,
            files: 1,
            fields: 1
        },
        fileFilter: (_, file, cb) => {
            console.log(util.inspect(file, false, null, true))

            if (!allowedMimes.includes(file.mimetype)) {
                const fileNameParts = file.originalname.split('.')
                const extension = fileNameParts[fileNameParts.length - 1]
                return cb(new APIError({
                    message: `The file type ${extension.toUpperCase()} is not accepted.`,
                    statusCode: 400
                }))
            }

            return cb(null, true)
        }
    }).single('file')

    handleFile(req, res, (err: any) => {
        if (err) {
            if (err?.code === 'LIMIT_FILE_SIZE') {
                console.log('err: ', err)
                return errorHandler({
                    message: `File is too big. File uploads must be smaller than ${maxFileSize / 1024 / 1024} MB.`,
                    statusCode: 400
                }, res)
            }

            errorHandler(err, res)
        } else {
            next()
        }
    })
}

When I upload this file: image

I get this error and my server side logs the following

{
  fieldname: 'file',
  originalname: '868607.jpeg',
  encoding: '7bit',
  mimetype: 'image/png'
}
err:  MulterError: File too large
    at abortWithCode (/Users/zact/Projects/app/application/server/node_modules/multer/lib/make-middleware.js:71:22)
    at FileStream.<anonymous> (/Users/zact/Projects/app/application/server/node_modules/multer/lib/make-middleware.js:134:11)
    at FileStream.emit (node:events:527:28)
    at FileStream.emit (node:domain:475:12)
    at SBMH.ssCb [as _cb] (/Users/zact/Projects/app/application/server/node_modules/busboy/lib/types/multipart.js:479:32)
    at feed (/Users/zact/Projects/app/application/server/node_modules/streamsearch/lib/sbmh.js:248:10)
    at SBMH.push (/Users/zact/Projects/app/application/server/node_modules/streamsearch/lib/sbmh.js:104:16)
    at Multipart._write (/Users/zact/Projects/app/application/server/node_modules/busboy/lib/types/multipart.js:567:19)
    at writeOrBuffer (node:internal/streams/writable:390:12)
    at _write (node:internal/streams/writable:331:10)
    at Multipart.Writable.write (node:internal/streams/writable:335:10)
    at IncomingMessage.ondata (node:internal/streams/readable:766:22)
    at IncomingMessage.emit (node:events:527:28)
    at IncomingMessage.emit (node:domain:475:12)
    at IncomingMessage.Readable.read (node:internal/streams/readable:539:10)
    at flow (node:internal/streams/readable:1023:34) {
  code: 'LIMIT_FILE_SIZE',
  field: 'file',
  storageErrors: []
}
6/13/2022 12:50:49 PM {
  message: 'File is too big. File uploads must be smaller than 10 MB.',
  statusCode: 400
}

source file I am uploading: 868607

zacharytyhacz avatar Jun 13 '22 17:06 zacharytyhacz