00:00
呃,咱们的上传功能呢,其实做起来还是非常有意思的,说实话下载里面咱们的操作性不是很强,对吧,你说这整篇的代码里面咱们能改的谁呀?你下载的文件对不对,还有就是咱们下面默认的文件名是不是对吧?大家注意这你可不能瞎写啊,你说你下载了一个TXT,结果你你给他一个默认的名字叫OBG,那肯定是不行的,对不对对吧,你说你下载的是OBG,但是你在这给了他一个PNG还差不太多,最起码他们的这个格式是有些是可以兼容的,对不对对吧?哎啊好,下面呢,咱们来实现上传功能,大家注意,首先你要知道上关了呢?好,首先大家要知道上传的这个要求啊,首先呢,上传能用get请求吗?啊,大家还记得不上传能不能用get请求啊,不能啊,TH冒号,然后在这咱们是A大括号是斜线叫test up,能看懂吧,诶。
01:12
来哎,这个东西我没让光大家光让大家看了是吧?啊,刚才想起来啊,咱们是不是在咱们下载的功能里面,在这是不是把我们的这个real pass给输出了,大家看看看idea walk space spring spring VC spring VC杠,DEMO4 target target在哪呢?在这呢,看到了没?好target下面的SPC-341.04内short,大家说是不是在这儿呢?是不是,所以说大家记好在我们的main工程里面对吧,我们当前咱们的服务器路径,就是我们部署到服务器之后的这个路径,然后就是它能看懂不,能看懂不?哎,好啊,行,我们这里面有的资源,然后咱们在服务器中是绝对能访问到的,能听懂吧,好啊,行,来不说了啊来下面呢,我们继续啊,首先呢,大家要注意上传功能一定用的是谁POS上。
02:12
能看懂吧?好在这咱们还需要再加上一个N肽。这听说过没?没有没有是吧,好,大家注意,咱们在这还需要再加上我们当前的一个属性,叫做n type,叫做multi part-form-data,那就陈老师这个东西,那它原来的值,就我们为什么要设置它,因为这个东西它默认值是application斜线XWWW-form-URL in COD的,能看懂吧?好,它默认的只是这个,而我们现在要想来实现上传功能,我们就必须得把咱们的n type的属性值给改成它,那这个时候呢,我们当前咱们的这一个form表单中的数据,它就不再会是通过咱们的内等于value and内等于value的方式传输到服务器了,而是通过什么呢?二进制的方式传输到服务器,能听懂吧,这个时候咱们才可以接收到我们的文件,能听懂吧?哎,如果说这两个条件你少一个,那我们当前的上。
03:20
上传功能你都完成不了,能听懂吗?哎,好啊行,然后下面呢,我们来看,那咱们就来写一个叫做头像,叫上传头像,OK,然后一个input,然后type等于谁啊type咱们就等于这个file file这能完成文件上传的,那就只有文件域了啊是不是啊。是不是啊?真没学过吗?没有,我的天呐,真没有假没有,我要给李维打电话,我看你们说的是不是真话啊,就表达就文件域没学过吗?没有没有就算了啊,就这个东西啊,就是咱们页面解析浏览器解析之后会显示一个框,你一点那个框可以让你选择一个文件,知道吧,哎,非常简单,它就是ta等于file能听懂吧,啊就这个东西啊,非常简单,好,然后下面那咱们在这再写个input,然后type等于sub me,然后value等于上传能看懂吧,哎,好啊,行,然后呢,我们把这个写完之后,咱们是不是就可以来写咱们的控制器了,对不对,对吧,首先方法public返回一个什么,就返回string成功,咱们就跳转到可不可以啊,可以吧,好叫做test up括号,大括号来。
04:45
首先request me括号,然后斜线叫做test up OK,来吧,我开始实现上传功能了啊。我这样。
05:00
先称一个nul啊,这样这样啊,直接称OK吧,重新部署,我先让大家看看这个东西长什么样,OK吧啊。这个东西大家虽然说没有讲过呀,然后但但是大家肯定是见过的啊,来现在咱们来刷新见过没有见过吗?选择文件大家看啊,咱们在这是不是就可以去选择一个一个的文件,是所有文件看到了没啊好啊行,然后呢,我们下面咱们来实现这个上传的功能,首先呢,咱们从步骤开始说第一步。添加依赖,知道不添加依赖,我们刚才咱们是不是添加的依赖叫做杰克森,有印象吧,叫做杰克森好,然后我们下边,然后咱们还要再添加一个依赖,叫做POS fair upload。这个东西是咱们上传功能的依赖架构,你不能少能听懂啊,必须要有,We部阶段的时候上传就必须要有,现在咱们的SPAVC中上传你也必须要有能听懂了,好这个东西啊,但是下载用不用,咱们下载不都已经写完了吗?下载用不用啊,不用,所以大家注意啊,我们当前commons go fill uplo的这个架工,它只有谁会用到上传,会用到下载,它就用不到能听懂不?哎,好啊,行,来吧,那我们现在咱们把咱们的依赖给导入进去,我这里面写的都有步骤,大家如果说哪看不明白的就问我OK吧,啊,行,把咱们的依赖添加进去,找到我们当前的po文件,咱们就把它给放到这吧,看common fair up road OK吧,好,写完之后,然后下面这是第一步,然后第二步咱们需要干什么,大家先看我的控制器。我在这个实现上传功能的控。
06:54
器里边啊,在咱们的spring VC中啊,然后要比他对我们上传的这个文件呢,进行了封装,能听懂吗?进行了封装,就比如说我们在这咱们所上传的文件,大家都知道它的内幕是等于photo的,是不是?那如果我要来获取咱们当前的这个数据,那我当前所使用的这个行参的名字也一定是photo,也就是说我在这肯定是要写个photo的,大家说对不对?但是要用什么类型来接收这个文件呢?大家注意啊,那在我们的Java里边,咱们是不是应该用的是file来表示文件是不是啊,那我们的spring VC中,它就把我们当前咱们的什么,把咱们当前的这个文件上传的文件封装到了一个什么对象中呢?叫做multi park field中,能看懂不?
07:48
叫做multi part f,这是咱们封装之后的对象,而这个对象里面呢,然后就把我们当前跟跟我们所上传的这个文件,它所包含的信息,以及我们要做的操作都给咱们封装好了啊,其实这说实话,这个spring VC中的上传,这没啥可讲的,对吧?photo.transfer to,这就是上传。
08:16
知道吧,哎,Transfer to这啥意思?转移知道吧,转移咱们不讲过rest吗?Rest of不是表述成什么什么什么资源状态转移,对不对啊,里面的转移就是这个transfer能看懂吧,这就是上传。然后后面这个是干啥的。这个非要代表的就是你要上传到哪儿,能听懂吧,能听懂吗?你只要找一个位置,然后呢,能够,这你只要找一个位置,找到我们当前要上传的位置,OK,这就完事了,能听懂不?哎,所以说非常简单,那行,那下边那咱们说正事,既然我们当前咱们的spread VC中把我们所上传的文件是不是封装成了multi multi part的file对象,对不对,对吧?那咱们当前上传的文件能直接转换成这个对象呢?大家注意不能,大家注意啊,是不能的,好,然后我们现在咱们要想将我们所上传的文件给转换成咱们的multi part file,我们必须得在我们的spring VC的配置文件中去设置一个文件上传解析器,能听懂不?
09:28
叫做文件上传解析器来配置,然后文件上传解析器,然后是用来干什么的,将上传的将然后上的文件转换,或者说封装,为什么对封装对吧,然后为什么对象ul猫猫part对象能看懂吧,好OK,那大家说这既然是一个解析器,那解析器是不是就叫做resource对不对,对吧,所以说大家看好怎么配置啊,这就是一个B,这个B咱们自己访问不不访问,由谁访问spring mvc的IC容器自动去访问它来实现一个转换的过程,能听懂不好来在这咱们的class叫什么看好不要写错了啊这。
10:29
Multi part fair对应的应该是multi part fair,就是multi part reservever,能看懂吧?好,但是这个东西大家会发现这是个啥接口,那接口你能配置到class中呢?不能,所以说咱们应该找到的实现类叫啥叫commons multi reserve能看懂不能看懂不好,OK,把它给写进去就完事了。好,但是。那咱们看看吧,咱们配置完之后,咱们看看呗,行不行?来,然后大家看好,那我在这儿啊,然后大家看好,你看这个photo,咱们说了,它是不是封装了咱们当前上传的文件,所以说咱们上传的文件的信息是不是都在这里面啊,比如说里面有一个叫点get,那咱们也不知道啥意思,那就输一下呗,行不行,然后里面有一个photo.get original file name,这是干啥的,咱们也不知道,咱们也输出一下能看懂吧,好,OK,来,我现在来重新部署,大家来看这个效果啊,来。
11:38
啊。啊西包子不管它啊,这个是咱们的价包的问题啊,好,然后在这呢,然后来我们来找到我们当前咱们的这个地方啊,把它给清空一下,然后大家看好,我现在来一个刷新,点击随便找一个文件,就1.ppt吧,行不行,好选中之后来咱们来点击上传大家看。
12:01
又报错了是吧?又报错了啊,这报的是什么玩意儿呢?空指针来找到这个地方,大家看是空指针,不是是控指针,哪一行报的错,53行,那大家自己找找,53行在哪呢?53行是不是在这儿呢?那你说这一句话里面的选项空啊,那必须得是photo为空啊,是不是啊?好,大家注意,你看在这个地方咱们已经配置了咱们的文件解析器了,但是为什么它还是不好使呢?大家注意,那说明你配了它没找到,大家说对不对?对不对,那配了没找到又说明什么问题,这是一个B呢,大家想想,你配了他没找到又说明什么问题啊?好好想想咱们学的spring。这个病咱们说了不是我们自己调用的,它是我们SPAVC在上传文件的过程中,然后是不是将自动来获得这个B,然后是干什么,然后来执行我们当前的一个转换操作,对不对,对吧?好,但是现在呢,我们当前的photo是null,说明我们有没有把咱们上传的文件给转换成multi part的field,对没有,那说明这个B起作用了吗?没有起作用,那没有起作用,那说明咱们的spring VC是不是压根就读读取不到它是不是,但凡是读取到它,那肯定是好使的,对不对,那为啥读取不到呢?那我们现在要来获得一个B,咱们是不是应该有两种方式,你要么根据ID获取,要么根据类型获取,大家说根据类型能获取吗?可以一定可以吗?但是不好意思,这spring VC啊,是通过ID获取的,知道吗?
13:49
我咋知道的呢?试出来的啊,试出来那没办法,要么你去看官方文档对不对,要么你去看官方官方文档啊,大家注意这个地方啊,它就是根据ID获取的,为啥呢?因为在这它的ID你必须得叫multi resourcever能听懂,不必须得叫multi part reserve,你这个名字不对,你获取你获取的photo筒的还是null,能听懂吗?
14:21
能听懂吗?哎,那大家想想吧,那是不是这个道理啊,你这里面有这个病,它获取不到,咱们先来看这个效果啊来。好,来,咱们来清空一下。好,然后下面大家看好,我在这来刷新,好,然后咱们现在同样是这个1.ovd来点击上传SOS好使不好使啊好使,来咱们往这看看,这get name获取的是谁,PhoTo Get original name获取的是谁?1.bg,那大家想,那既然我们当前咱们加上个ID好使了,那你说这是什么作用,为什么会出现这个问题,那不就说明它是根据ID获取的吗?对不对?
15:08
大家说是不是呀,对吧,而且这个ID是不是还必须得是个固定值,你要根据类型获取呢,这里面有这个类型吗。这要根据类型获取,这里面有multi part的类型吗?要根据类型获取的话,咱们这里面没有multi part类型吗?没有commons multi reserve类型吗?有没有?有吧。那我刚才说的是multi reserve,它不对吗?难道刚才大家没有看到这个东西是一个接口,所以咱们要用它的实现类吗?是不是啊?行,不说那么多了啊,大家是不是听的有点懵啊,不是这个大家蒙到哪了,你能跟我说一下吗?咱们配置了一个bin,我没有加ID的时候它不好使,我加上ID的它好使了,那难道我说它是根据ID获取的,这不对吗?啊,你根据类型获取的,它这有要根据类型获取,它肯定是能获取到的呀,有同学说这里面有俩,你告诉我另外一个在哪呢?
16:30
啊,你告诉我另外一个在哪呢?我怎么找不着呢?啊。要是这里面有你还用配置吗?还用你配置吗?啊。我的天呐,用不用不就不用你配置了嘛,是不是啊,对吧,所以说这里面肯定是没有的,咱们才需要配,而且咱们配完之后,它也不是根据类型获取的,要根据类型获取的,大家说那这里面你能获取不到吗?那肯定能获取到,对不对,咱们加了个ID的好使了,那说明这是根据ID获取的,对不对,是不是啊,哎,行啊,好,这个大家注意,那行,那大家来看你看这里面是不是封装了咱们当前上传的文件的信息,这个get name是干什么的,大家说啊,这是不是来获取我们当前咱们的什么。
17:21
是不是来获取咱们当前表单元素的内部属性值吗?是不是叫photo,是不是也就是这个东西,也就是它能看懂吧,好,然后下面这个get fair name这个东西是用来干嘛的,来获取我们当前咱们上传的这个文件的名字对不对?大家说这两个谁比较有用?上面这个还是下面这个。三。啊,这两个东西咱们哪个比较有用啊?啊,大家说我不知道它叫photo吗?我这photo.get name等于photo,这photo是从哪来的,我自己不知道它,我怎么获取它呢?
18:06
啊,所以说这两个咱们哪个比较有用。还是不知道啊。好,来,大家注意,这个东西是来获取我们当前的文件名的啊,来,然后这个咱们叫做file命名可以吧?好,OK,为什么要来获取文件名,大家说啊,那咱们上传的时候,咱们上传到指定位置,那咱们是不是也要给他一个名字是不是啊,对吧?啊,行,那咱们知道它的名字了,那咱们就可以来实现上传了,怎么实现上传?记不记得咱们在这有一个叫photo.transfer to是不是对吧?那我们是不是要来确定一下我们要上传到哪?大家说对不对?那咱们要上传到哪呢?比如说我要上传到我们的web APP下面的photo,这个录可不可以,可不可以啊,可以吧,好,OK,那咱们该怎么来实现咱们的上传功能呢?好。
我来说两句