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

Next.js上传图片报错EACCES: Permission denied 本地正常部署后失效

排查解决步骤

EACCES: Permission denied 报错属于操作系统级别的读写权限异常,本地运行正常是因为本地开发账号对项目目录有完整读写权限,线上环境运行Next.js的进程账号权限不足,可按以下步骤排查:

  • 第一步:核对进程运行账号与存储目录权限
    执行ps aux | grep node查询线上Next.js进程对应的运行用户名,再执行ls -la 你的图片存储目录路径查看目录的所属用户、权限配置。需保证进程运行用户对该存储目录拥有读、写、进入权限(目录需具备执行权限才能进入操作)。
    权限修正命令参考:
    # 修正目录所属用户为运行Next.js的账号
    chown -R 运行用户名:运行用户组 你的图片存储目录路径
    # 或者调整目录权限为755(所有者可读写执行,其他用户可读和执行)
    chmod -R 755 你的图片存储目录路径
    
    不要设置777权限,会产生安全风险。
  • 第二步:排查部署环境的特殊限制
    • 若使用Vercel、Netlify等Serverless平台部署:这类平台的运行环境默认是只读文件系统,仅/tmp临时目录可写入,且临时目录内容会在请求处理完成后清空,不支持持久化存储本地文件。你需要调整上传逻辑,将图片存储到第三方对象存储服务即可。
    • 若使用Docker部署:需确认你已将本地存储目录挂载到容器内部,且Dockerfile中指定的运行账号对该目录有操作权限,可在Dockerfile中提前创建目录并赋权,参考语句:
    RUN mkdir -p /app/uploads && chown -R nextjs:nextjs /app/uploads
    
  • 第三步:核对存储路径配置
    不要在代码中使用相对路径指定存储目录,线上环境的工作目录可能和本地不一致,建议用process.cwd()拼接绝对路径,参考写法:
    const uploadDir = path.join(process.cwd(), 'public', 'uploads')
    

相关报错截图:
报错截图

内容的提问来源于stack exchange,提问作者Munsif Ali Misri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:54:03