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
相关产品推荐
相关产品推荐

