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

使用express-fileupload时req.files返回[object Object],无法保存原文件名

解决express-fileupload保存文件时文件名变成[object Object]的问题

嘿,我一眼就看出问题出在哪了!当你看到保存的文件名叫[object Object],本质是你直接把文件对象当成字符串拼接进路径里了——req.files.audiofile是一个包含文件信息的对象,不是原始文件名,直接拼的话JS会把它转成默认的对象字符串表示[object Object]。

核心问题点

你需要从文件对象里提取name属性,这个属性才是用户上传时的原始文件名。

修正后的完整代码

先补上你代码里遗漏的express-fileupload引入,再修正路径拼接逻辑:

var express = require('express')
var app = express();
var fileUpload = require('express-fileupload'); // 之前的代码漏了这个require!
var bodyParser = require('body-parser')

// 初始化中间件
app.use(fileUpload());
app.use(bodyParser.urlencoded({ extended: true })); // 处理表单数据可选,但建议加上

app.post('/upload', function(req, res) {
  // 更严谨的判断:确保文件存在且是audiofile字段
  if (!req.files || Object.keys(req.files).length === 0 || !req.files.audiofile) {
    return res.status(400).send('No files were uploaded.');
  }

  // 获取文件对象
  let audiofile = req.files.audiofile;
  // 拼接保存路径:用audiofile.name获取原始文件名
  const saveDir = __dirname + '/uploads/';
  const savePath = saveDir + audiofile.name;

  // 先确保uploads目录存在,避免报错
  const fs = require('fs');
  if (!fs.existsSync(saveDir)) {
    fs.mkdirSync(saveDir, { recursive: true });
  }

  // 执行保存
  audiofile.mv(savePath, function(err) {
    if (err) {
      return res.status(500).send('文件保存失败:' + err.message);
    }

    res.send(`文件上传成功!原始文件名:${audiofile.name}`);
  });
});

// 启动服务
app.listen(3000, () => {
  console.log('服务器运行在3000端口');
});

额外优化建议

  • 如果担心同名文件覆盖,可以给文件名加个时间戳前缀:
    const fileName = `${Date.now()}-${audiofile.name}`;
    const savePath = saveDir + fileName;
    
  • 记得先安装依赖:npm install express express-fileupload body-parser

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:24:09