首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【微服务】148:图片上传业务

今天是刘小爱自学Java的第148天。

感谢你的观看,谢谢你。

学习计划安排如下:

昨天写了新增品牌业务,其中有一个参数是图片,我们并未上传图片。

今天主要就是完成图片上传功能。

因为上传不仅有图片的上传,还可能是其它上传,为了其通用性,创建一个独立的微服务。

一、创建upload微服务

关于微服务的创建,有核心三个步骤:引入依赖、配置文件和启动类编写

主要说下配置文件中的注意点。

上传微服务对应的端口号:8082。

微服务名称为:upload-service

既然是上传图片,那么要设定上传的大小,不能让任意大小的图片都能上传。

max-file-size:限定上传文件大小,例子中就是一个文件大小不能超过5M。

max-request-size:限定请求数据大小,例子中也就是一次请求最多传10M。

其它的配置比如eureka注册不再赘述。

至于依赖,需要什么在pom文件中引入即可,启动类编写也很简单,以前写过很多遍了。

关于请求

昨天在分析前端页面的时候就说明过:

请求路径/方式

全路径即为上图中对应的url,为网关映射路径+真实路径,真实路径即为image。

请求方式为POST请求。

请求参数

关于参数即为文件file,至于其返回值为一个字符串,即图片文件对应的url。

网关配置映射路径

upload映射路径即对应着upload微服务。

也就是说当浏览器上的访问网关该映射路径时,其实本质上执行的是upload微服务。

二、后台代码编写

因为本身并未对数据库进行操作,所以并没有涉及到Mapper层的代码编写。

1Controller层

无外乎还是这4个内容:

请求路径:真实路径image,上面分析过。

请求方式:POST请求。

请求参数:文件file,这里被封装成了MultipleFile,在学SpringMVC时讲过。

返回值:图片对应的url字符串。

2Service层

既然是图片文件,我们首先要校验其类型,不能是文本文件视频文件;再对图片内容校验。

图片类型校验

MultipartFile有一个getContentType方法,通过它可以获取上传图片的类型。

我们将图片的类型存放在一个集合中,在将集合和上传图片类型比较即可。

比如png文件,jpg文件都是常见的图片文件类型,还有bmp文件,上述忘记说明了。

图片内容校验

我们是将图片存储在nginx中的,创建一个file文件说明对应的html文件夹路径即可。

如果是以前我们需要通过IO流复制该文件,完成图片的上传与保存。

而MultipartFile提供了transferTo()方法可以直接完成文件的复制,根据语义也好理解。

返回图片url

返回一个url,即图片的域名+图片名,关于图片名还可以使用UUID保证名称的唯一性。

PS:为什么图片地址要使用独立的url?

如果是保存在服务器内部,会产生额外的负担,这样显然是不合适的。

如果不使用独立的域名,在访问静态资源时会携带不必要的cookie加大请求的数据量。

所以要使用独立的域名,既然如此那我们要配置图片对应的域名。

三、图片域名及测试

既然返回值中说明了域名,同样的道理,SwitchHosts和nginx完成域名的使用。

这个我们在nginx中专门讲解过反向代理,即第142天的学习笔记。

总之通过它能达到一个什么目的呢?

在浏览器上输入图片对应的全路径,会访问到nginx中html里的文件。

当然再次做一个强调

该配置只是好看,知道有域名这回事,因为域名需要去买很麻烦,所以只好这么配置。

域名配置完成,代码也编写完毕,做个测试

利用insomnia来模拟上传图片:

向upload微服务发送请求,服务器接受该请求,将上传的图片保存到了nginx中。

响应状态码是200即表示成功。

我们到对应的html文件夹中可以看到保存的图片,其中因为配置了域名,所以在浏览器上直接用域名也可以访问到图片。

最后

行有不得反求诸己,我是@刘小爱

一个白天上班晚上学习的95后沪漂,不为其它,只为学会自律做好自己,也愿我的每日打卡能给你带来勇气,欢迎点赞关注和评论。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200907A02M1B00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券