multer上传的图片存于public目录但ejs页面无法渲染该如何解决
你的问题出在两处路径配置错误:
- 静态资源目录的拼接逻辑错误
你写的app.use(express.static(__dirname+"./public/"))存在路径拼接问题,__dirname本身不带结尾路径分隔符,和./public/直接拼接会生成类似/你的项目路径./public/的非法路径,导致express无法正确映射public目录下的静态资源。 - 前端ejs模板的图片引用路径使用了相对路径
./uploads/<%=item.img%>是相对当前页面路由的路径,如果你在多级路由下访问页面,会出现路径拼接错误,无法正确指向静态资源根目录下的uploads文件夹。
修复方案
第一步:修改静态资源配置代码
将原来的静态资源注册代码替换为:
app.use(express.static(path.join(__dirname, 'public')));
用path.join处理路径拼接,可以自动适配不同操作系统的路径分隔符,生成正确的public目录绝对路径。
第二步:修改ejs模板的图片引用路径
将img标签的src属性改为绝对路径开头:
<img src="/uploads/<%=item.img%>" alt="image">
开头的/表示直接从站点根目录寻址,不管当前页面路由是什么层级,都可以正确指向public目录下的uploads文件夹对应文件。
修改完成后重启服务即可正常加载图片。
内容的提问来源于stack exchange,提问作者Rasheed 789456
相关产品推荐
相关产品推荐

