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

NestJS部署图片文件始终返回404错误求助

解决NestJS静态图片服务404问题

问题根源分析

  • rootPath路径计算错误:你的join(__dirname, '..', '../../uploads')会跳出项目根目录,导致Nest找不到/uploads文件夹。__dirname对应/MyProject/src,..回到/MyProject,再../../就到了项目外的根目录,自然找不到项目内的/uploads。
  • 全局前缀与serveRoot的路由组合问题:全局前缀file会作用于所有路由,包括静态文件服务,需要正确匹配访问路径。

修正步骤

1. 修正ServeStaticModule的rootPath配置

将rootPath改为正确的相对路径,确保指向项目内的/uploads目录:

// app.module.ts
ServeStaticModule.forRoot({
  rootPath: join(__dirname, '..', 'uploads'), // 从src目录回到项目根目录,再指向uploads
  serveRoot: '/public' // 去掉末尾斜杠,避免路由冗余
})

2. 使用正确的访问路径

结合全局前缀file,正确的图片访问URL应为:

http://localhost:5004/file/public/myimage.png

可选方案:让静态文件绕过全局前缀

如果你希望静态文件直接通过/public/myimage.png访问(不需要带file前缀),可以在配置中添加exclude规则:

// app.module.ts
ServeStaticModule.forRoot({
  rootPath: join(__dirname, '..', 'uploads'),
  serveRoot: '/public',
  exclude: ['/file*'] // 排除全局前缀路由,让静态文件服务独立生效
})

此时访问路径为:

http://localhost:5004/public/myimage.png

验证要点

  • 重启Nest服务,确保配置生效
  • 检查/uploads目录的读取权限,确保服务进程能访问该目录
  • 确认图片文件名拼写完全一致(注意大小写敏感)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 04:34:55