00:00
接下来我们来编写文件上传功能,我们先来看一下在我们系统里边如何将上传的文件进行存储,因为在单体应用的情况下,和分布式应用还是有很大不同的,比如我们以前开发的是一个单体应用,我们这个小商城就部署在了一台服务器上,我们想要做文件上传,浏览器会给我们这个项目发送请求,将上传的文件呢交给他,我们这个项目收到请求以后呢,将我们这个文件保存在当前项目的某个位置下边,那如果我们下次想要用这个文件,我们还给他发请求,那他就将这个文件呢再返回给我们进行显示就行了。当然这是单体应用的情况下这么来做,但如果我们一旦是分布式情况下,我们某一个服务呢,要经常被人访问,一台服务器不够,我们可能把它部署多台。假设我们这个商品服务部署了三台服务器,那第一次文件上传,我们由于负载均衡来到了这个服务器,那它还像以前的方式。
01:00
将当前文件保存在他这个项目的某个文件夹下,那下次请求想要获取文件了,我们负载均衡到了其他服务器,那其他服务器是没有这个文件的,所以就会有一些问题,那在分布式情况下,我们怎么解决这个问题?非常简单,我们浏览器啊,无论是发给哪个服务,要进行文件上传,那最终呢,将上传的文件都统一存储在一个文件系统里边,这样任何服务统一在一个地方写,也在一个地方读,就不会出现自己持有的文件别人找不到的情况。那这个文件存储服务器呢,我们可以选择自己搭建,也可以使用第三方给我们做好的云存储功能,如果自己搭建可以使用fast DFS Vs FT pd等等,但他们的缺点呢,就是环境搭建起来稍微比较复杂,而且我们得有专人去来维护,而且如果文件存储多了,我们还得搭集群情况。
02:00
对象存储也叫oss,它的全称呢是object storage service对象存储服务,我们后来就是使用它来存放我们项目里边的一些图片、音频等这些文件,要使用这个对象存储呢,我们首先就得开通它。关闭这个广告窗口,我们来到我们这个个人信息里边,点击实名认证。点击个人实名认证,使用支付宝授权认证就行了,我们同意提交确定完信息。我们就完成了实名认证,我们继续来开通对象存储,点击立即开通。我们同意协议,点击立即开通。那对象存储开通成功以后呢,我们就来到自己的控制台,可以在这儿点击进入自己的管理控制台,也可以在这儿呢,进入自己的管理控制台,点击左侧的菜单,如果我们已经开通了对象存储,那这就有对象存储,包括呢这也有快捷进入到我们对象存储里边。
03:11
那大家看到这个界面呢,说明我们对象存储已经开通成功了,而且在我们整个项目开发期间,我们对象存储的费用呢,也不会超过一块钱,所以大家放心的使用,要如何使用对象存储,我们还要参照它的文档,点击更多有一个API文档,这个文档呢,我们再帮助中心打开。首先要使用对象存储,我们得了解一下它的几个专业术语,第一个专业术语叫bucket,指的是存储空间,它就是用来存储东西的某一个空间,比如来到我们这个对象存储的控制台,我们一般推荐的一个项目,创建一个bucket,在这个bucket里边存储我们当前项目的一些文件,那我们后来呢,再来创建一下。第二个专业术语呢,叫object,也就是对象,就是我们对象存储里边,在我们存储空间里边存储的这些一个个的文件内容,我们就把它叫做对象。
04:11
还有一个叫地域region,我们在创建对象存储的时候,比如我来创建一个空间,我想要存储内容,我们就可以在这儿来选中这个区域,这就是我们说的地域。还有一个叫。End point将访问域名,也就是我们最终这个对象存储里边存到的所有文件是通过我们这个end point来访问的。还有一个术语呢,叫密钥,这个呢非常重要,我们要能给我们的这个存储空间里边上传一些文件,那我们就需要呢提交我们的账号密码在这一块指的就是密钥,密钥呢有access kidd,就是访问的钥匙的ID和钥匙的密码。这是一对,也就是我们的账号密码,那么呢,就可以先来创建一个bucket,也就创建一个存储空间来存储我们项目里边的所有文件,比如我们这个存储空间就叫鼓励mail,这个存储空间呢,以前被人用过,你就可以给它加个hello后缀吧。好,来选中我们所要用的区域,可以根据自己的实际情况选择就近的区域,我们在这一块呢,选用低频访问就行了,因为呢,我们只是一个项目测试,那专业的呢,可以来选标准存储,它具有高可靠,高可用,高性能等各种特点,我们选用低频访问,而且注意在这块读写权限里边,我们选择公共读。
05:40
那公共读就是我们这个空间里边存储的所有文件,大家都是可以读的。如果我们选择的是私有,那就是这个文件里边所有的读和写都需要携带我们的账号密码,都需要身份认证,而如果我们写公共读写,那就更害怕了,我们这个空间里边任何人都可以给里边存储东西,即使没有账号密码,好,我们把它关掉,我们选择公共读继续修改服务端,加密暂不需要日志呢,我们也不需要,我们点击确定我们在这儿呢,就创建了一个存储空间,这个桶我们就可以给它里边,比如这有一个文件管理。
06:22
来上传文件,上传的文件呢,我们就可以公共访问来看一下,比如我来上传一个文件,我们直接上传。我们随便上传一个图片,那上传上来以后呢,我们想要公共访问,我们只需要在详情里边。我复制图片的整个地址。这样呢,只要这个链接别人有引用,我们就可以直接访问,但是他这块呢,直接给我们下载出来了,也是一样的,诶这个图片呢,也是有的。这是我们整个开通了对象存储的过程,当然我们后来给这里边来存储文件,肯定不是我们自己在这儿一个一个上传上去的,那应该是通过我们的后台项目,我们点击新增我们要上传品牌的图片的时候,我们点击上传,把它自动上传给我们对象存储的这个空间里边,并且拿到我们这个图片真正的图片地址以后呢,我们项目里边只需要引用这个图片地址,我们就可以展示图片了。
07:25
那如何做成,我们在前端里边,我们上传一个图片,最终上传到对象存储这里边。我们可以有这几种方式。比如第一种方式。我们这个用户通过浏览器也好,什么也好,我们将这个图片,我们选择文件上传,把它呢先上传给我们的应用服务器,也是我们自己的项目,比如我们在这儿,我们在这儿呢上传了,我们就上传,把整个上传请求文件上传请求提交给网关,交给我们商品服务,商品服务呢拿到文件的这个图片留了,我们使用Java代码将这个图片的流数据传给我们对象存储,最终呢存到这儿,并且拿到他的地址。
08:13
这是我们第一种方式,但这种方式呢不好,我们文件上传中间还要过一下我们自己的服务器,完全没有必要,我们的服务器呢,就会在大量用户下带来我们整个瓶颈,所以我们使用第二种方式,让服务端签名后上传,其实我们要上传给对象存储与我们有一个账号密码,这个账号密码呢肯定是不能暴露的。那这个操作流程怎么做呢?我们下一节课参照文档做好我们的文件上传。
我来说两句