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

Express+Multer部署到服务器后上传文件报EACCES权限错误

解决Multer文件上传服务器端EACCES权限错误

1. 替换相对路径为绝对路径

远程服务器的工作目录可能和本地不一致,../这类相对路径容易导致实际指向的目录出现偏差(即便你确认路径存在)。用Node的path模块拼接绝对路径,避免工作目录差异问题:

var express = require('express');
var router = express.Router();
const multer  = require('multer');
const path = require('path'); // 引入path模块

// 用绝对路径指定上传目录
const upload = multer({ 
  dest: path.join(process.cwd(), 'public/data/uploads') 
});

router.post("/uploadFile", upload.single("myFile"), (req, res) => {
  console.log(req.file);
  res.send("jodwajo" + req.file)
});

process.cwd()会返回当前Node进程的工作目录,确保路径稳定指向项目根目录下的public/data/uploads。

2. 修复目录权限

即便目录存在,运行Node进程的用户(比如www-data、当前登录用户或PM2运行用户)可能没有该目录的读写权限:

  • 先确定运行Node的用户:用PM2的话执行pm2 show <app-name>查看;Nginx反向代理场景通常是www-data用户。
  • 修改目录所属用户组:
    sudo chown -R 运行Node的用户名:用户组 /path/to/your-project/public/data/uploads
    
    示例(假设用户为www-data):
    sudo chown -R www-data:www-data /var/www/your-project/public/data/uploads
    
  • 设置安全的目录权限(禁止使用777):
    sudo chmod -R 755 /path/to/your-project/public/data/uploads
    
    若需要同组用户可读写,改用775:
    sudo chmod -R 775 /path/to/your-project/public/data/uploads
    

3. 检查SELinux(仅CentOS/RHEL系服务器)

如果服务器开启了SELinux,它可能会阻止Node进程写入目录,需设置正确的文件上下文:

sudo semanage fcontext -a -t httpd_sys_rw_content_t '/path/to/your-project/public/data/uploads(/.*)?'
sudo restorecon -Rv /path/to/your-project/public/data/uploads

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:33:15