NodeJS Multer fileFilter不工作(它不返回404错误状态)

nuypyhwy  于 2023-06-22  发布在  Node.js
关注(0)|答案(1)|浏览(154)

这是我的Multer配置文件

  1. module.exports = (multer({
  2. storage: multer.diskStorage({
  3. destination: (req, file, cb) => {
  4. cb(null, './public/upload/especies')
  5. },
  6. filename: (req, file, cb) => {
  7. cb(null, Date.now().toString() + "_" + file.originalname)
  8. }
  9. }),
  10. fileFilter: function (req, file, cb) {
  11. if (!file.originalname.match(/\.(jpg|jpeg|png)$/)) {
  12. console.log('false')
  13. return cb(null, false);
  14. }
  15. console.log('true')
  16. return cb(null, true);
  17. }
  18. }))

然后我调用这个文件config作为上传图像路由器内部的中间件

  1. const router = express.Router();
  2. const uploadImg = require("../middlewares/UploadImageEspecie");
  3. router.post("/uploadImg", uploadImg.array('images', 12), async (req, res) => {
  4. if (req.files) {
  5. console.log(req.files)
  6. return res.json({
  7. error: false,
  8. message: "Upload realizado com sucesso!"
  9. })
  10. }
  11. else {
  12. return res.status(400).json({
  13. error: true,
  14. message: 'Erro: Upload não realizado com sucesso, necessário enviar imagens no formato PNG, JPG ou JPEG.'
  15. })
  16. }
  17. });
  18. module.exports = router;

但是,由于某种原因,当我尝试上传一些.mp4或.psd扩展名的文件时,它不会返回错误404状态,并且还会打印console.log false。为什么会这样?

0sgqnhkj

0sgqnhkj1#

在multer的filter的回调函数中,第一个参数应该是一个Error的示例,如new Error('Invalid file format')

  1. module.exports = (multer({
  2. storage: multer.diskStorage({
  3. destination: (req, file, cb) => {
  4. cb(null, './public/upload/especies')
  5. },
  6. filename: (req, file, cb) => {
  7. cb(null, Date.now().toString() + "_" + file.originalname)
  8. }
  9. }),
  10. fileFilter: function (req, file, cb) {
  11. if (!file.originalname.match(/\.(jpg|jpeg|png)$/)) {
  12. console.log('false')
  13. return cb(new Error('Invalid file format'), false);
  14. }
  15. console.log('true')
  16. return cb(null, true);
  17. }
  18. }))
展开查看全部

相关问题