00:00
各位同学大家好,刚才呢,咱们完成了腾讯云。对象存储服务的这么一个介绍,包括写了代码,完成了上传测试,那下面呢,咱们结合我们的具体功能,然后进行实现,首先我们先完成文件上传的接口,然后再整合讲师头像上传的前端,那下面我们先来开发文件上传的接口,咱们看怎么来做。首先第一步在咱们项目中先引入依赖,这依赖钢材单经引入过了,那我们来看一下这个依赖啊,来到我们的接口中,首先第一个就是里边的cosa片,然后我再加上一个依赖,这依赖是一个日期时间的工具类,为了咱一会儿操作方便,主要是这个依赖。腾讯云对象存储的这个依赖。这是咱的第一步,然后这步做完之后,我们再进入到第二步,第二步咱们做什么呢?大家看我课件中。
01:02
因为在咱操作中有几个值是固定的,包括你这个账号的IDK地域节点。还有你的8K名称都是固定的,所以咱把这几个值放到咱的配置文件中,然后我们写个工具类来读取配置文件中的内容,我们这么来做,那我写一下啊,在配置文件中加上这么一段配置,我把这单配置复制过来,咱们看一下这个配置啊,首先第一个。大家看啊,这两行什么意思啊。什么意思啊,是不是设置上传文件的大小,咱们设置成1024兆,下面有你的地域节点IDK,还有你的8K的名称,那这个我复制一下。首先8K的名称,这个名称。ID和密钥。就是ID和我从这里边复制一下,这是我的ID,然后这是我这个把这个拿到配置文件中来,这个完成,完成之后呢,下面咱们写个工具类来读取配置文件中刚才这几个固定值,我在里边写下。
02:12
首先我先建个包,这个包就叫us,然后在YouTube里边呢,我来创建一个类,这个类我跟课件中起相同的名字,这个字。然后创建之后呢,至于我怎么做啊,然后这个类呢,实现一个接口,这接口叫做in这么一个接口,那我写一下啊。因利他。这么一个接口,把这个写上。呃,应该不是这个接口啊,写错了,应该是另外一个接口,我给他重新写一下啊,Init init。Iz。这个接口啊,就是利这个B这个接口,然后它里边有方法咱们做个实现,那我说一下啊,这个实验这个接口它的含义是什么?就是现在大家看这个单词的含义,它表示在我们初始化bin的时候,那这个类就来创建,它在创建过程中读取配置文件中的值,最终进行赋值,在我们初始化B的时候就来读取配置文件,然后在类上边咱们加上一个注解。
03:22
我就加这个在下面我们做个读取,怎么读取写下啊,首先我们先加一个属性。Private string,第一个咱们用的是这个叫地域节点,也就是里边的这个名字,我跟他保持一致。小这里,然后咱怎么读取呢?在此文里边呢,有这么一个注解叫at value表示注入,然后在里边呢,我们加上一个表达式,通过表达式读取配置文件中内容,然后配置文件根据它等号左边的名称,把这值我们给它读到,读到之后不是给这个变量中去,这是我们写的第一个读取它这个地域节点,别的读取跟他应该是一样的,那我们再来写一个。
04:12
Private缀第二个咱们读取它里面那个ID,包括key,包括8K名称,这三个我就直接复制一下,你写法都是一样的啊,咱拿过来,你要保证这些名字跟你配置文件中的名字保持一致就可以了,不要写错,通过艾特value表达式读取值,最终做个赋值可以了,然后赋值之后,它在初始化B的时候就会读取赋值,但是读取赋值之后呢,大家发现啊。这些是不是都是私有的,私有的咱肯定不能用,那我们怎么做呢?我们的做法就是。创建就是I里边的这么几个固定值,我来创建,然后咱们在这个方法中做个赋值,大家看这方法的名字啊。表示在你属性设置之后,就是你在读取完成之后,赋值之后,这个方案会执行,执行之后咱们做过赋值。
05:08
那我写一下啊,第一个这个point。就是咱的这个地域节点,等于里边这个叫。节点,然后剩下几个值跟它应该都一样,那我直接复制啊,咱做个复值就可以了。剩下还有这么几个值,然后复制之后,后面咱通过类名点上这个属性,这值可以取到,因为他们都是S静态的,所以现在咱们把这个工具类就完成了,它会读取配置文件中的值,最终用类名点属性名字获取到里面的值,为了他在里边统一做这个处理。所以这是我们的第二部分,然后这个完成之后,我们继续往下来做,下面呢,咱开始写它的,包括service部分,那我首先把control和service咱们先给它创建出来,然后再做实现。
06:03
首先我建个control,我们起个名字就叫file upload control。在CTRL上面加上它的注解,我把这复制啊,咱们直接用这个课件中相同的这个名字,文件上传接口,Right controller request mapping,加上路径,现在这个完成,完成之后呢,我们来创建一个service,在里边我先建一个interface,我们起个名字就叫file。Service。然后创建之后创建它的一个实现类。File service。ML让他实现咱们这个。然后别忘记啊,在实验类上边加上一个service这么一个注解,就不要忘记,最后在CTRL里边咱们做一个注入。
07:02
我写一下啊。Private file service,所以在这个结构我们就完成了,完成之后下面呢,我们在TRL编写,包括S里边最终做实现,那咱来写一下啊。首先我写一个注解,就是API operator,为了咱们测试方便,这个是文件上传,下面加上提交方式,咱们上传嘛,用的肯定是post提交,然后里边起个名字就叫。Load,最后加上方法public。这个方法名字就叫upload file。这个咱完成,我先蕊成一个值,先不让他报错。result.ok啊,所以现在这个结构我们先完成了,完成之后呢,咱要做的话,第一部分因为我们要上传文件,所以CTRL里边是不是要得到正常文件,那怎么得到,在VC里边给我们封装一个对象,叫做马t partt file,用它可以得到,然后得到之后咱们调用里边的方法完成一个上传,我们叫upload这个file。
08:21
最终让他就返回咱们上传之后那个文件的路径,也是在这个腾讯云里边那个路径。我们写一个ul。然后最终把路径我们给它做一个返回啊,并且这个提示信息改一下,比如message改一个我们就上传。文件成功,所以现在CTRL部分咱们就完成了,完成之后呢,在里边把这方法先做一个创建文件上传到方法。创建之后,最后来到实现类中,咱们实现它最终的这个方法,文件上传的方法,那我们最后写一下啊,这个方法写的话,在腾讯云里边,它有文档给我们已经写好了,咱们直接用下就可以了,那咱们还是按照腾讯云的过程进行实现。
09:17
大家注意啊,咱们刚才在那个测试代码中其实写了一个结构,但是刚才测试代码中的结构中,你看里边有个地方就是这个地方。我们的路径是写固定的,而现在咱们因为是上传文件,所以咱们可以改一种方式啊,那我们找到它的文档,咱们看一下啊。在文档中,首先第一步固定的就是里边的这个步骤,这个不变,包括咱刚才写过了,所以这个代码我就不再敲了啊,我直接把刚才这个代码复制过来给他改一下,就是刚才这个代码咱们先。拿过来,然后拿回来之后里边几个值改一下啊,这个ID和K,咱们通过工具类给它取一下,你刚才刚写了工具类第一个ID应该是它。
10:06
然后第二个加上那个K。我们加一下应该是这个值,如果你不放心啊,可以到里面看一下这值不要写错,一个ID,一个K,这是我们写到的,然后写完之后往下来改,这里边有它那个地域节点,那我们给它也是获取一下,通过工具类里面那个叫and point,得到里面那个地域节点。地域节点就是里边的这个值。AP杠,北京。然后得到之后,咱的第一部分完成了,完成之后呢,下面咱们开始做那个上传过程,那我们到里边找一下啊,咱往下来找,因为刚才那是简单入门找到里边的这个位置,Java SDK里边的对象操作里边有一个上传文件,在上传文件中,咱往下找看,我们现在用的上传往下来看啊。
11:01
大家看。这是不是叫流的类型啊,所以咱用这个来做一下上传,那我现在啊,把这段代码咱们复制一下,然后咱们做个实现啊,就是里面这个代码直接咱们拿过来啊。应该不需要用到这个transition for measure啊,直接往下面就可以了,那咱们把这个拿过来,咱们给它改一下啊,首先我们看第一部分啊,这里边有一个文件的输入流,而输入流呢,咱们可以给它获取一下,因为咱们刚才有那个文件,所以咱们通过文件可以直接把它输入流得到,那这里边我来获取一下啊,这个咱就去掉了。我写一下啊,获取上传文件的输入流就是input STEM。咱们通过five给他取到。点上get input,这是得到文件的,这个就会出来了啊,这里面有异,我直接捕获它那个。
12:08
直接用这个异常啊,然后把我们的代码都放到这个catch里边去。都放到这里面来,所以现在这部分完成,完成之后我们继续往下来写。下面是什么呢?有个对象叫object object就是传入你文件那个长度,这里写到,如果你实在得不到,这可以省略啊,咱就不获取了,直接来一个空的对象,下面调方法进行实现,在方法中传入我们相关的值,这个值咱们来看一下啊,里面有哪些值。首先第一个。咱往下看啊,第一个就是我们这个name,咱们这里面有,而这个名字咱通过那个工具类也可以得到一下。有这个bucket的名称。然后这里边是你那个文件的名称,这个文件名称呢,咱通过file可以得到,就是它的实际或者说原始的名称,这个咱得到,得到之后往下来看啊,第一个bucket名称,第二个文件名称,第三个输入流,第四个是这个object。
13:14
现在我们都传进去了,然后传之后最后调方法,咱们最终来完成里边这个上传过程,就是把上传我们最终做实现,那咱们啊,最后把这个来写一下,而这过程中呢,就这个代码啊,咱可以换我们就是。测试中的代码,因为这个跟我们那个有一点点偏差,其实都是可以的啊,咱测试代码中你看啊,最后我是不是调了这个方法,所以咱现在也可以调这个方法,最终来做这么一个上传过程,我把这个拿过来,就这些上传这个过程都是由腾讯云给咱们封装的,咱们直接把这个调用复制就可以了。所以以上啊,咱就把这个上传过程就初步实现出来了,就是里边的这么一个结构,然后这个之后呢,我们继续往下来完善,就是现在我们注意啊,因为咱们上传之后要返回。
14:14
你上传那个文件的路径。这个要返回,而文件路径呢,在它返应结果中,刚才咱们测试过它并没有这个径,所以这个径呢,咱们需要自己来给它拼接一下这个路径,那怎么拼接,咱们看一下它那个径的地址,这个地址根据他把径咱给他拼接出来,然后最终做个返回就可以了。那我们来写一下这个路径啊,首先各位看啊这个路径特点,各位看到这一部分是什么。是不是你的8K的名称啊,AP杠北京是不是你里边那个就是地域节点,然后后面这些都是固定的,所以咱们直接做个拼接可以了,这个我就不敲了啊,我把我课件中代码直接复制过来,就是一个简单的做出来拼接,或者说你用S或者s build做个拼接。
15:06
现在我们就可以了,然后地域节点我从里边获取一下。就是里边的找到啊,地域节点那个值应该就是这个。啊,这个咱们拿过来,然后放到这里。这个位置。所以大家看啊,现在咱就把这个上传的基本过程应该就完成了,这是我们写这代码最终做一个退。所以大家啊,把这个代码能准确完成出来,它就是按照那个腾讯云的文档最终做的一个实现。然后洗完之后呢,这接口咱可以做一些简单的完善,怎么完善,大家注意啊,我说两个地方,这是第一个。比如说我现在传的文件叫零一.gpg我传第一次这个文件,我第二次还传相同名称文件,他把之前文件是不是会覆盖掉,但是咱的文件是不是肯定不能覆盖,所以第一个咱让文件名称每次都不相同,大家可以想象得到啊,我们作为用户来讲,咱们并不关心文件存的名字是什么,只关心是不是能显示哦,所以我在文件名称里边就加一个随机的唯一的一个值,让文件名称每次都不一样就可以了,所以咱们最后处理,那我直接写一下啊。
16:27
在里边我就加上一个UUID的值,让他每次都不要u id.random u ID。点上to string,然后里边有那横杠,我给它去掉啊,就是每个里边U应该是类似于这种形式,简单写一下,比如说应该是这样。每个里边有个横杠,我就把这横杠给它去掉啊,当然不去掉也可以,咱为了明确给它去掉一下啊。横杠。变成空。逗号空,然后最终我们这个位置做个拼接,就是在每个文件前面加上一个UUID址,保证每个文件都是唯一的一个名称,这是我们写到的,然后写完之后呢,我们可以再做下一个处理。
17:14
我写一下啊,这个地方。在文件名称的前面。前面咱们添加上一个UUID址,保证每个文件名称都是唯一的,然后下面呢,我们对这个上传文件可以做一个分组处理,我就根据当前的日期,就是当前的年月日做处理,比如说咱们当前22022年11月11号,根据他最后处理,那咱们也是处理一下啊,下面咱来获取一下当前的日期,就是当前的营业日。那怎么获取呢?各位注意啊,刚才我引入过一个依赖,这依赖就是为了我们这里面方便,它里面有相应的方法能直接实现。
18:02
那我们来。做一下这个写法啊,咱们做法就是直接new上一个叫date time,里边有这方法,然后咱们加上一个叫to string,里边加上日期时间格式就是四个Y代表年,两个M代表月,两个D代表日,最终得到这个结果啊,比如咱起个名字就叫这个。Date time。然后得到之后,咱们给他做个处理,最终传进来,咱刚才提到过啊,我这K如果说传的值是这个样子,咱刚才都测试过,如果这个样子,那他会在八个里边建文件夹,然后上传文件,所以咱传的就长成这个样子,最终做个封装可以了,这个啊我就直接复制一下。就是这么一个结构。这个单位拿来啊,刚才都测试过了,我就快速写下啊。所以以上咱们就做了两个处理,第一个在文件名称前面加上一个唯一的一个UID值,第二个对文件做个分组,根据当前的年月日做一个分组,所以现在这个上传接口我们就写到这里。
19:15
给各位按照腾讯云的过程能最终做实现。然后洗完之后下面呢,我把这服务器启动一下,我们先通过swag先做个测试,然后测试之后再整合前端,最终完成讲师管理中添加讲师里边的上传讲师头像功能,咱们swa哥先测试一下啊,看一下能不能传进去。等它先启动啊,然后启动之后我打开swa swag怎么用各位同学应该都记得啊,咱之前一直在用啊,那我写一下啊swag。Localhost。8301加上swa-ui.html回车找到我们的接口,文件上传接口。
20:04
文件上传在里边try out,选择本地的一个文件,咱就选择这个还是这个零一.p了啊,还是这个文件。然后选择之后点执行,我们看最终结果。大家看啊,提示我们成功返回的是不是这个路径,你看路径里边包括日期,包括文件,文件前面加上了UI地址到8K里边,咱们刷新看一下。大家看里面特点啊,202。然后里边有一个零四。有一个2020里边有咱们上传的文件,咱们点预览看文件是不是可以了,所以现在我们就把这个上传文件的接口就最终完成了,各位啊,按照过程能准确的现出来。
我来说两句