up:: SpringBoot电商项目商品模块增加商品接口之上传图片接口开发

说明:

(1) 为什么开发本篇博客?:在【SpringBoot电商项目商品模块增加商品接口之上传图片接口开发 】中,引出了这个问题;

本篇博客就来阐述并解决这个问题;

(2) 本篇博客的主要内容就是:自定义静态资源映射目录;

(3)声明:有三个问题,其实并没有彻底清楚:

● 疑问一:究竟能不能通过如【http://127.0.0.1:8083/E:/imooc-mall-upload-file/7b0fe9be-cdd6-4bd4-9119-dc1474c0ac05.jpg】的方式,访问到服务器本地的地址;实测是不可以的,那么为什么?

● 疑问二:这儿的file可以指向本地文件,其究竟是什么意思,这其中的转换过程是什么;目前,并没有仔细研究;

● 疑问三:我们这儿配置【静态资源映射】究竟是出于【安全考虑,不能对外暴露服务器实际的目录接口】;还是出于【根本无法直接访问得到服务器本地的目录地址,只能通过资源映射的方式才能访问得到】呐?对于这个问题,自己目前也没有仔细研究;


一:问题描述;

延续 【SpringBoot电商项目商品模块增加商品接口之上传图片接口开发】,启动项目;

然后,调用【上传图片】接口;

但是,通过这个返回的url,是访问不到这个图片资源的;


其实,真实的图片地址是:


所以,如何能够显示出这个上传的图片,就是我们要解决的问题;(PS:其实我们在实际开发中,当我们上传了图片等静态资源的时候;我们上传完了,是需要去检验一下的;不能上传了就完事了,而是要去及时的检验测试;)

由此,就引出了静态资源配置的问题;


二:解决策略:自定义静态资源映射目录;

其实,前面【SpringBoot电商项目商品分类模块使用Swagger自动生成API文档】的介绍的Swagger,就是对API的资源,进行了一个路径的配置;

1.自定义静态资源映射目录:的主要目的;

● PS:我们为什么不直接返回图片在服务器上的地址,而是返回【http://127.0.0.1:8083/images/82007f18-b8c2-4909-8ed5-316b7bdc498c.webp】这个地址;至于为什么这么故意绕个弯,主主要目的是为了安全;这一点在上篇博客【SpringBoot电商项目商品模块增加商品接口之上传图片接口开发】作了详细介绍;

2.配置SpringBootWebMvcConfig:以实现:把上面的那个图片的url地址,映射到服务器实际存储图片的本地目录;

在我们 【SpringBoot电商项目商品分类模块使用Swagger自动生成API文档】配置Swagger时,所创建的ImoocMallWebMvcConfig配置类中,进行配置;

在ImoocMallWebMvcConfig类中,增加以下配置;

 
//商品图片等定义静态资源映射
 
 registry.addResourceHandler("/images/**").addResourceLocations("file:" +  Constant.FILE_UPLOAD_DIR);

说明:

(1) 内容说明;

(2) 重启程序;不用重新访问接口,还用刚才的那个url;

这样一来,我们在上传图片时候,我们就能用这个为了安全考虑,而和图片实际地址不同的url,访问到图片了;

其实,【上传图片】接口返回给前端这个url,然后这个url会作为【增加图片】接口的image参数,其会被存在数据库中;然后,浏览器在显示商品的时候,就可以从数据库中拿到这个url,然后就能够在浏览器上显示出这个图片了;