首页 > 解决方案 > req.file 未定义:使用 multer 快速上传图片

问题描述

我正在尝试使用 multer 在快速服务器中上传图像,但是,使用邮递员使用下面的路由上传图像会给出 json 消息{ msg: 'image uploaded successfully' }(即,正确到达路由),但req.file会给出undefined. 为什么?相关文件结构如下,以确保我正确引用了目标:

-backend
--routes
---uploadRoutes.js
--server.js
-frontend
-uploads

上传路由.js

import path from 'path';
import express from 'express';
import multer from 'multer';

const router = express.Router();

const storage = multer.diskStorage({
  destination(req, file, cb) {
    cb(null, 'uploads');
  },
  filename(req, file, cb) {
    cb(
      null,
      `${file.fieldname}-${Date.now()}${path.extname(file.originalname)}`
    );
  },
});

function checkFileType(file, cb) {
  const filetypes = /jpg|jpeg|png/;
  const extname = filetypes.test(path.extname(file.originalname).toLowerCase());
  const mimetype = filetypes.test(file.mimetype);

  if (extname && mimetype) {
    return cb(null, true);
  } else {
    cb('Images only!');
  }
}

const upload = multer({
  storage,
  fileFilter: function (req, file, cb) {
    checkFileType(file, cb);
  },
});

router.post('/', upload.single('image'), (req, res) => {
  console.log(req.file);
  try {
    res.status(200).json({ msg: 'image uploaded successfully' });
  } catch (error) {
    console.error(error.message);
  }
  // res.send(`/${req.file.path}`);
});

export default router;

标签: node.jsexpressfile-upload

解决方案


只需检查headerbody form-data请求,因为如果您在应用程序文件中有这一行,您的代码是正确的

app.use("/uploads", express.static("uploads"));

在此处输入图像描述

请求头

在此处输入图像描述


推荐阅读