我在ExpressJS中使用multer。我想将文件上传限制在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
})
})
当文件低于0.5 MB时,我可以看到"你的新头像上传了",但当它结束时,我得到了
Error: File too large
at makeError (C:UsersOwnerDesktopnodejs projectsdummynode_modulesmulterlibmake-error.js:12:13)
at abortWithCode (C:UsersOwnerDesktopnodejs projectsdummynode_modulesmulterlibmake-middleware.js:77:22)
at FileStream.<anonymous> (C:UsersOwnerDesktopnodejs projectsdummynode_modulesmulterlibmake-middleware.js:139:11)
at emitNone (events.js:80:13)
at FileStream.emit (events.js:179:7)
at PartStream.onData (C:UsersOwnerDesktopnodejs projectsdummynode_modulesbusboylibtypesmultipart.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)
显然,我永远不希望最终用户看到这个。我该如何正确处理?
试着这样重写(先删除"上传"):
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
})
我在server.js
文件的末尾创建了一个Express处理程序。
- 将处理程序函数放在所有
app.use()
之后,检查multer是否出现此错误并发送所需的数据。我的代码发送LIMIT_FILE_SIZE
字符串
app.use(() => (err: Error, req: Request, res: Response, next: NextFunction) => {
if (err instanceof multer.MulterError) {
return res.status(418).send(err.code);
}
});
文档:http://expressjs.com/en/guide/error-handling.html#error-处理