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

Nginx搭配Node.js(multer)上传文件报EACCES权限错误如何解决?

EACCES错误解决方案

EACCES错误本质为Node.js运行进程无目标上传目录的读写权限,系统禁止了进程对./files/目录的写入操作,可按以下步骤处理:

1. 确认Node.js进程运行身份

执行如下命令查询当前Node服务的运行用户:
ps aux | grep node
输出结果第一列即为进程对应的运行用户,常见值包括www-data、nobody、普通用户名等。

2. 确认上传目录权限配置

获取项目中./files/目录的绝对路径,执行如下命令查看目录权限归属:
ls -l <files目录绝对路径>
输出结果可查看目录的所属用户、所属组、读写权限配置。

3. 修正目录权限

两种可选方案,优先选择方案1:

  • 方案1(生产环境推荐):将目录所有权赋值给Node进程运行用户
    执行命令:
    sudo chown -R <Node运行用户>:<Node运行用户组> <files目录绝对路径>
    示例:若Node运行用户为www-data,目录路径为/opt/project/files,则命令为:
    sudo chown -R www-data:www-data /opt/project/files
    该方案仅开放权限给需要的进程用户,安全性最高。
  • 方案2(仅测试环境临时验证):开放目录全局读写权限
    执行命令:
    sudo chmod -R 777 <files目录绝对路径>
    该方案会允许所有用户读写该目录,存在安全风险,仅用于快速排查问题,禁止在生产环境使用。

4. 附加优化建议

  • 禁止使用root用户运行Node.js服务,避免权限溢出风险
  • 原multer配置中使用相对路径./files/容易因启动工作目录不一致导致路径识别错误,建议替换为绝对路径,修改后配置如下:
const path = require('path')
const storage = multer.diskStorage({
    destination: function(req, file, cb) {
        cb(null, path.resolve(__dirname, './files/'))
    },
    filename: function(req, file, cb) {
        cb(null, Date.now() + "_" + file.originalname.split(" ").join(""))
    }
});
  • 权限修改完成后重启Node.js服务,再验证上传功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:06:03