【问题标题】:Multer nodejs - req.file is undefinedMulter nodejs - req.file 未定义
【发布时间】:2022-01-18 19:12:15
【问题描述】:

我正在使用 Node、Express 和 ejs 以及 multer 创建一个应用程序来上传图像。每次我提交表单时, req.file 都是未定义的。我花了一整天的时间进行故障排除,但无法弄清楚我做错了什么。

HTML

<form action="/post" id="formPost" method="post" enctype="multipart/form-data">
     <input class="img-file" type="file" name="image" required>
     <input class="submit" type="submit" value="Post" />
</form>

app.js

const path = require('path');
const express = require('express');
const morgan = require('morgan');
const bodyParser = require("body-parser");
const multer = require('multer');
const app = express();

app.use(express.static(path.join(__dirname, 'public')))
app.set('view engine', 'ejs'); 
app.set('views', path.join(__dirname,'resources/views'));
app.use(bodyParser.json());   
app.use(bodyParser.urlencoded({ extended: true }));

const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, "./image");
  },
  filename: function (req, file, cb) {
    console.log(req.file);

    cb(null, Date.now() + "-" + file.fieldname + ".png");
  },
});
const upload = multer({ storage: storage });
app.post("/post", upload.single("image"), (req, res) => {
      console.log(req.file);
});
app.get("/post", (req, res) => {
  res.render("post");
});
app.listen(, () => {
  console.log(`Example app listening at http://localhost:3000/login`);
});

【问题讨论】:

    标签: node.js express multer


    【解决方案1】:

    你有几个小错误:首先你忘记添加port 而不是login 它应该是post 然后我们立即点击正确的地址,避免错误Cannot GET /login

    app.listen(3000, () => {
      console.log(`Example app listening at http://localhost:3000/post`);
    });
    

    项目文件夹和文件结构


    app.js 我添加了一个简单的错误处理程序:

    app.post("/post", upload.single("image"), (req, res, next) => {}
    

    const path = require("path");
    const express = require("express");
    const morgan = require("morgan");
    const bodyParser = require("body-parser");
    const multer = require("multer");
    const app = express();
    
    app.use(express.static(path.join(__dirname, "public")));
    app.set("view engine", "ejs");
    app.set("views", path.join(__dirname, "resources/views"));
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({ extended: true }));
    
    const storage = multer.diskStorage({
      destination: function (req, file, cb) {
        cb(null, "./image");
      },
      filename: function (req, file, cb) {
        console.log(req.file);
    
        cb(null, Date.now() + "-" + file.fieldname + ".png");
      },
    });
    const upload = multer({ storage: storage });
    
    // app.post("/post", upload.single("image"), (req, res) => {
    //   console.log(req.file);
    // });
    
    app.post("/post", upload.single("image"), (req, res, next) => {
      const file = req.file;
      if (!file) {
        const error = new Error("Please upload a file");
        error.httpStatusCode = 400;
        return next(error);
      }
      res.send(file);
      console.log("Success", req.file);
    });
    
    app.get("/post", (req, res) => {
      res.render("post");
    });
    
    app.listen(3000, () => {
      console.log(`Example app listening at http://localhost:3000/post`);
    });
    

    post.ejs

    <form action="/post" id="formPost" method="post" enctype="multipart/form-data">
      <input class="img-file" type="file" name="image" required />
      <input class="submit" type="submit" value="Upload File" />
    </form>
    

    输出:

    选择文件并按上传文件后:

    VSCode 输出:

    像魅力一样工作 ;-)


    【讨论】:

    • @3305_TrầnĐìnhTrung 不客气!您现在可以将我的答案标记为有用,它解决了您的问题!最好的祝福 !并继续编码;-)
    猜你喜欢
    • 2020-12-17
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 2019-04-04
    • 2021-10-02
    • 1970-01-01
    • 2016-06-21
    • 2017-01-15
    相关资源
    最近更新 更多