springboot上传图片到服务器某个路径,怎么通过这个路径显示图片?路径不在项目路径中
利用springboot开发网站,一个简单的功能:上传图片,然后显示。上传的图片存放在非项目路径下,eg:D:/appdata/images
中,然后图片地址放存放在数据库中,存放的数据为D:/appdata/images/picturename.png
。
想法很简单:从数据库中读取出这个字段,传值到网页,让页面通过这个路径显示图片。但是没有显示,F12调试,图片路径为:http://localhost/D:/appdata/images/picturename.png
有考虑过读取到图片路径,通过流将图片传送到页面,但是查询出来的数据有很多,这样的话每个图片都要转化为流再返回给界面。有没有更好的方案呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
將上传图片存放到非项目路劲中,没用文件服务器,也没有使用流传送。实现方案是改变spring的默认静态图片资源路径,当然,这并不是完美的方案:可能也会遇到部署的时候,指定的路径中没有静态图片资源会导致页面无法渲染图片、资源没有打包到项目中。上自己的解决过程。
需要配置springboot。
1、配置application.properties文件,添加配置指定上传路径,比如我的配置字段为:
cbs.imagesPath=file:/D:/upload/
2、添加配置类:
这段代码不需要详细知道什么意思,知道这个代码更改后,图片放到
/D:/upload/
后,从磁盘读取的图片数据scr将会变成images/picturename.jpg
的格式。这样改了之后,网页的静态图片资源就需要放到指定的路径中了,b比如:<link rel="shortcut icon" type="image/x-icon" href="images/avatar_b.jpg" media="screen" />
3、数据库中存放图片再磁盘中的绝对路径:
4、读取字段,获取文件名,比如
/20170824122758.jpg
,然后拼装为/images/20170824122758.jpg
5、结果:磁盘中的图片: 网页中的图片:
希望大家多多指正,不胜感激!
更好的解决方案?
一般都是将图片上传到一个文件服务器上,可以看看FastDFS或者是OSS,数据库中存储的是文件的绝对地址。
页面读取图片路径最好是相对路径,全路径一般读取不到,当然不排除别的做法。你可以将全路径截取成相对路径放入数据库中,上传文件功能最好是能上传服务器下的文件夹里。
如果你没有一个单独的服务器处理静态资源请求或者文件服务器的话,你上传的图片还是就写在项目的路径下吧。
这个路径有点搞事情http://localhost/D:/appdata/i...。
如果是使用的是外置 tomcat 容器,可以在
server.xml
配置一个虚拟目录。1、使用 止于秋分 说的方式
2、如果有使用 Nginx 的话可以用 Nginx 做个代理,图片等都访问你上传的目录