You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js & Express表单提交返回404:文件上传功能报错求助

解决Node.js文件上传404错误的排查指南

兄弟,作为Node.js新手遇到这种404真的太常见了!我刚学的时候也踩过一模一样的坑,咱们一步步来排查:

1. 最核心的问题:有没有配置/upload的POST路由?

浏览器跳转到/upload返回404,90%的概率是你的Express应用根本没定义这个路由!不管用formidable还是express-fileupload,必须先给/upload加个POST请求的处理路由:

用express-fileupload的示例代码:

const express = require('express');
const fileUpload = require('express-fileupload');
const app = express();

// 先挂载文件上传中间件(这步别漏!)
app.use(fileUpload());

// 关键!必须有这个POST /upload路由
app.post('/upload', (req, res) => {
  // 先判断有没有文件上传
  if (!req.files || Object.keys(req.files).length === 0) {
    return res.status(400).send('没选择任何文件哦!');
  }
  // 这里写保存文件的逻辑,比如把文件存到uploads文件夹
  const uploadedFile = req.files.yourFileName; // 这里的yourFileName要和表单里的input name一致
  uploadedFile.mv('./uploads/' + uploadedFile.name, (err) => {
    if (err) return res.status(500).send(err);
    res.send('文件上传成功啦!');
  });
});

用formidable的示例代码:

const express = require('express');
const formidable = require('formidable');
const app = express();

app.post('/upload', (req, res) => {
  const form = new formidable.IncomingForm();
  // 可以设置上传文件的存储目录
  form.uploadDir = './uploads';
  form.parse(req, (err, fields, files) => {
    if (err) {
      console.error(err);
      return res.status(500).send('上传出错了');
    }
    // 这里可以处理文件重命名等逻辑
    res.send('文件上传成功!');
  });
});

2. 检查你的EJS表单有没有写错

打开./views/test2.ejs,确保表单的这几个属性都正确:

<form action="/upload" method="POST" enctype="multipart/form-data">
  <!-- 这里的name属性要和后端代码里的文件名对应,比如上面的yourFileName -->
  <input type="file" name="yourFileName">
  <button type="submit">提交上传</button>
</form>

⚠️ 重点提醒:enctype="multipart/form-data"这个属性绝对不能漏!没有它的话,浏览器根本不会正确发送文件数据,而且可能间接导致路由匹配异常。

3. 确认视图页面能被正确访问

你得确保Express能正确渲染test2.ejs,所以要配置视图引擎和对应的GET路由:

// 设置EJS为视图引擎
app.set('view engine', 'ejs');
// 指定视图文件的目录(如果你的视图在./views下,这步可以省略,但写上更稳妥)
app.set('views', './views');

// 渲染test2.ejs页面的路由
app.get('/', (req, res) => {
  res.render('test2');
});

启动服务器后,你要访问http://localhost:3000(假设端口是3000)来打开表单页面,而不是直接打开本地的test2.ejs文件!直接打开本地文件的话,表单提交的是file:///upload,肯定404。

4. 最后检查服务器启动配置

确保你的服务器监听了正确的端口,比如:

app.listen(3000, () => {
  console.log('服务器跑在http://localhost:3000啦!');
});

启动后严格按照控制台提示的地址访问,别搞错端口号。

按照这几步排查下来,99%能解决你的404问题!如果还是不行,把你的完整路由代码和表单代码贴出来,我再帮你看~

内容的提问来源于stack exchange,提问作者Porturan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:01:54