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

使用Express-fileupload上传文件时遇ENOENT目录不存在错误 - Node.js

解决Express-fileupload上传PDF时的ENOENT目录不存在错误

嘿,我看你用Express-fileupload处理文件上传时碰到了ENOENT: no such file or directory的错误,这个问题其实挺常见的,主要是两个核心点没处理到位:目标目录不存在,或者路径写法出错了。咱们一步步来搞定它:

1. 先确保目标目录存在

Node不会自动帮你创建多级目录,所以如果public/files/CLPs这个路径里的任何一级目录还没创建,调用.mv()方法时肯定会报错。你可以用Node内置的fs模块递归创建目录,这样不管目录是否存在都能正常工作:

const fs = require('fs');
const path = require('path');

// 基于项目根目录拼接目标目录路径
const targetDir = path.join(__dirname, 'public', 'files', 'CLPs');
// recursive: true 表示自动创建所有不存在的父级目录
fs.mkdirSync(targetDir, { recursive: true });

2. 修正文件路径的写法

你现在用的/public/files/CLPs/minor_CLP.pdf是系统根目录的绝对路径,不是你项目里的public文件夹!这就好比你在电脑里找C:\public\...,但你的项目实际在C:\projects\my-app\public\...,肯定找不到目标位置。

正确的做法是用path模块拼接基于项目根目录的路径,这样不管在Windows还是Linux系统下都不会出错:

app.post('/uploadCLP', isLoggedIn, function(req, res) {
  const communityID = req.user.communityID;
  console.log(req.files);
  
  // 先拿到上传的文件(替换成你前端表单里的文件字段名)
  const uploadedFile = req.files.clpFile; 
  // 你要设置的可查询文件名
  const targetFileName = 'minor_CLP.pdf'; 

  // 拼接正确的目标文件路径
  const targetFilePath = path.join(__dirname, 'public', 'files', 'CLPs', targetFileName);
  
  // 保险起见,再次确保目录存在(哪怕之前创建过,重复执行也不会有问题)
  const targetDir = path.dirname(targetFilePath);
  fs.mkdirSync(targetDir, { recursive: true });
  
  // 移动文件
  uploadedFile.mv(targetFilePath, function(err) {
    if (err) {
      console.error('移动文件出错:', err);
      return res.status(500).send('文件上传失败,请重试');
    }
    
    // 这里执行把文件名存入SQL表的逻辑
    // 比如用你的数据库客户端执行INSERT语句,把targetFileName和communityID存进去
    // 示例:db.query('INSERT INTO clp_files (file_name, community_id) VALUES (?, ?)', [targetFileName, communityID], ...)
    
    res.send('文件上传成功,已记录文件名到数据库');
  });
});

3. 额外要注意的小细节

  • 检查目录权限:确保Node进程有读写public/files/CLPs目录的权限,尤其是部署到Linux服务器时,可能需要调整目录的所有者或权限(比如用chmod或chown命令)。
  • 避免文件名冲突:如果需要处理多用户上传,建议动态生成文件名,比如结合社区ID和时间戳:${communityID}_${Date.now()}_CLP.pdf,防止同名文件覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:59:41