00:00
来我们接着往后看啊呃,下个话题呢,我们来给大家讲一下文件的上传操作啊,就是在我们这个,呃,其实我们呃,Java web里面呢,呃也有这个玩家上传跟下载的操作啊,但是呢,没有给大家去讲过啊,我们就直接把它放到这个框架里面去做啊OK,呃,那么这个文件上传怎么去做呢?首先给大家去讲一下这个它对呃文件上传的一个支持啊,就spring MC呢,MVC呢,对这个文件上传提供了一个直接的支持啊,就是通过一个叫做呃,Which parkor来去实现的啊,当然了啊,它只是一个接口啊,那么它在这个接口下面呢,使用一个具体的文件上传技术啊,就是我们的coms fair upload这个技术来去实现了一个啊music server的实现类,就叫做什么coms music server,那么其实呃,它的这个原理是什么样子的呢?你要做文件的上传,那么我们最常用的一个技术叫做coms。
01:00
阿pro的这个技术,这个技术跟MVC是没有任何关系的,能明白吧,而只不过MVC呢,它是使用我们的coms非阿罗这个技术呢,诶重新帮你提供了一个叫做coms server这样的一个组件来帮你啊,诶进行文件的一个上传操作,所以说这本质上它使用的技术呢,还是我们的commons fair upload能理解吧,这个技术的话,我们第一次听说啊,但是呢,你要记住了,文件上传我们几乎都要去使用到coms还upload啊,那么呃,在这个spring Mac啊中呢,它默认情况下是没有去装配我们的com beauty,所以说呢,我们在进行文件上传的时候呢,需要提前把它先配置出来,然后呢,我们才能进行文件的一个上传操作啊,这就是它的一个什么基本上的一个原理啊,好,那么具体的配置的话呢,这个地方也有一个示例啊,我们接下来呢,诶,就来进行一个文件上传的演示啊好,首先呢,我们再。
02:00
回到我们的开发工具中啊,来到这个index页面,那么一开始的话呢,你肯定是要有一个文件上传的一个表单的啊,就是你要进行文件的上传,那么应该怎么做呢?来听我讲,你要有一个放表单。啊然后呢,Action的话呢,比如说呃,叫做upload是吧,Upad就是文件上传啊upload然后呢,啊这个method注意了啊,上传文件必须要使用post的请求,听懂了吧,而且呢,必须还是再去设置一个AC ta。OK,这个值呢,是它默认的,我们是不用啊进行改的,但是如果你要进行这个文件上传操作呢,这个值就不行了,我们得把它改上一个值啊,这个东西大家看一看还熟不熟啊,什么时候见过它啊,在讲这个呃价的时候,我们说过发送po请求是得去设置一下它啊啊可能大家已经忘了啊,但是呢,我们以前肯定是见过它的啊,这个你不用去记啊,但是呢,我们现在如果你要进行文件上传的话呢,这个家伙就得去改了,改成什么呢?啊part form减data啊,需要改成它了。
03:15
明白吧,只有改成他了以后呢,才能支持我们文件的上操作好,然后呢。在我们的form里面呢,我们需要去写出一个啊上传的这个文件啊,比如说啊上传文件OK,这里面我们写的是A部长等于什么呀。诶,它是一个file,就是让你去选择一个文件啊那个比如说我就叫做upload的file,然后对吧,诶就叫做upload file啊好,然后呢,我们可以再去写上一个,比如说我们做一个文件描述啊,文件描述我们来一个啊,啊普通的一个文本文框啊,Text等于text啊name的话,比如这叫DES对吧,文件描述好最后的话呢,我们再来一个input submit啊然后呢,Value呢,就等于啊上传。
04:11
写个中文啊好,就等于上传就可以了,能看到吧,来那么这样的话呢,我们就把这个表单呢,就给他开发好了,来开发好以后呢,我们可以来访问一下啊。好,我们先来看一下这个表单啊。OK,长得呢就是这个样子的,然后呢,诶一点浏览了,你就可以去选择一个你要上传的文件,然后呢,这个地方写上你的描述是吧,一点上传,它就开始进行上传了,好,那么这也是一个具体的请求,那么我们在我们的handle了中呢,就要去给他什么诶进行一个处理,所以说接下来这个位置我们写的是文件的,诶上传好,那么将来你上传成功以后呢,比如说我还是希望你去往一个页面啊,那我们就返回一个字符串的吧,就测试我们的阿罗的file啊,文件上传啊,Mapping。
05:06
啊,这是我们的叫什么来着。阿洛的是吧?来叫C啊,就叫阿的吧。啊呃,那么在这个里面的话,大家注意啊,就将来我们选中一个文件,然后在这个表单中我选中一个文件,然后呢,再来选中一个,就是再写上一个描述,上传的时候呢,这两个诶就会什么上传到我们后台的这个服务器中啊,就是来到我们这个方法中了,那么来到这个方法中的话呢,我们需要去获取这个请求参数,而这个请求参数呢,是分成两部分的,第一部分就是那个,呃,你上传的那个文件,第二部分呢,就是你写的那个普通的字符串,就是那个DC描述,能理解吧,那么我们是怎么获取请求参数的,大家还记得吧。我是不是会直接去声明一个行参,然后呢,指通过request pma指定把这个给到我的哪个行参里面,把这个给到我的哪个行参里面是不是行了,对吧?说这个地方我们做起来特别简单啊,呃,比如说我先写一个字符串来写的de sc,我就要求你at request para,我要求你,诶把谁呀,把你这个请求参数中的de sc,把这个值呢,给到我的这个C材上面,那么同样的道理,我也可以指定什么呀,诶指定你把这个request para,你把你上传的这个文件我们叫做什么呀?叫做uplo的file吧,OK,你把这个参数呢,给到谁上面呢?诶注意你给到一个叫做milk part fair。
06:39
啊,给到什么上面,就是比如说这就叫做什么阿罗的,那么这样的话,大家注意啊,就是你上传过来那个文件呢,它就直接把它保存到诶这个对象里面了,那么后续的话呢,我们就可以基于这个对象来进行一个文件的保存操作就可以了,所以说呢,对于这个spring mvc来讲,做为一个上传是特别简单的,因为他帮我们提供的这个music fair的一个支持,你上传过来的这个文件数据直接就能给你封装到一个具体的对象中,能听懂吧,所以说呢,这种方式用起来特别简单的啊,OK,但现在的话呢,大家注意,我们还不能直接去使用啊,就是我们刚刚说过的啊,你得借助于一个什么commons fair up这个技术,然后呢,你还得去配置一个commons reserve,对吧,这两个东西如果你不配的话呢,你这个地方肯定是不能去用的,所以说呢,接下来我们就把那个该配的东西,该加的加包的给它先加进来啊,首先我们用。
07:39
不到的技术呢,叫做什么呀?来,还是回到这个破里面去找啊,这个里面呢,有我们用到的开发包,比如说tos里面有一个fair upload,在这个里面呢,有个炸包,哎,这个炸包就是我们专门用于上传的一个炸包,好把它拷贝出来,拷贝出来以后呢,我们把它放到我们的Li下面啊,放到我们的Li下面,注意,如果你要去使用这个commons fair阿lo,那么我们还必须要再去使用一个科SIO包啊,这个呢,大家一定要把它记住了,这是炸包与炸包之间的一个依赖关系,就是你要用到这个科s fair uplo的,那么你就必须得去用这个coms elbow a,此这两个我们都要给人家导入进来,明白了吧,把他们两个导入进来了以后呢,我们接下来再回到我们的配置文件中。
08:32
好,我们来去配置我们的文件的上传啊,好,那么这个呢,它就是一个病,然后呢拉叫什么呢,就叫做啊就是它,然后呢,大家听我讲啊,这就是一个comments s,然后这个里面的话呢,我们可以去指向一些,诶给他什么配置上一些这个属性啊,有哪些呢?注意有什么啊,编码呀,什么最大的上传大小啊,上传的临时文件夹呀等等一些我们都是可以去指定的,好那么我就拿出其中的两个来给大家去讲一下。
09:15
啊,首先这个deft encoding我们必须得给他去要配置一下,比如说我直听的utf杠八啊,然后这个是什么意思呢?啊,大家注意先把它关掉是吧?来听我讲,呃,这个东西要么你就不配,要配的话呢,呃,就是一定要注意啊,跟我们的JSP的页面的编码一定要一致,解释一下,你在这个上传的这个表单呢,它是位于我们的这个JSP文件中的,而我JSP的编码呢,是UTF杠八,那么你上传的这个文件里面的这个内容,比如说你的诶这些数据啊什么的,它都会采用uf杠八的编码来给你去编,所以说呢,将来我们去解码的时候,我们就也要通过UTF杠八来进行什么解码,所以说这个位置你再去配的时候,一定要保证什么呀,保证与我们什么呀上传表单所在的JSP页面的编码一致。
10:15
能听懂这个意思了吧?哎,一定要跟这个编码是一致的啊好,下一个呢,我们再来配一个吧,就是经常的话我们也会去写上啊,有一个什么呀?呃,Max的up size就是一个最大的上传大小,比如说我允许你上传的文件大小最大不能超过多少,那么你就可以在这个位置给它做一个指定了,听懂了吧?啊,它是以这个字节为单位的哈,那我们来写一下,呃,字节为单位的话,那我写上个1024是多少啊,一兆啦?啊,1KB码是不是啊,1024个字节不就是1KB吗?对不对?再乘一个1024,这才是一兆嘛,对不对?1KB乘以1024不就是一兆嘛,那再乘个十吧,这不就是十兆吗?就是我最大要求你能上传什么十兆啊,那这个算出来多少?1048。
11:15
啊,1024乘以1024等于1048576再乘个二十幺零四八五七六零是吧?啊104857啊5760是吧?那这就是大概什么呀?啊5760是吧?这大概是多少十兆对不对?OK,那那我们就写到这了啊行吧,那我们就暂时就设置下他们两个就可以了啊大家了解一下,然后呢,这个配置好以后呢,我们就可以在这个位置去做做一些什么具体的处理了,那么其实现在我们这个文件呢?啊,已经给你上传到这个对象里面了,那么接下来我们的操作就是如何把这个数据呢,给他去保存起来,因为你上传文件嘛,对吧?上传的原理是什么呢?上传的原理是什么呀?正好根据下载是反过来的,下载是从服务器端把数据下载到本地,而上传的就是什么将本地的文件。
12:15
对吧,就是上传到我们的服务器端了,能理解这个意思吗?这就是一个上传,能听懂吗?这个可以吧,OK,好,那么现在我们要做的事就是什么呀,你上传过来那个文件,我就要去想办法保存起来,保存到什么地方呢?那我就保存到我这个,将来我这个工程下面呢,我去创建一个。文件夹啊,我就叫做什么呀,Upload可以吧,Uploads吧,加个S啊,那我希望呢,将来我所有上传过来的文件呢,都保存到这个文件夹上面,但是大家注意哈,并不是直接保存到我们本地的这个文件夹,而是保存到什么地方呀,保存到服务器里面,你部署的这个应用里面的谁呀,阿罗的里面的听明白了吧?哎,所以说一会你上传成功以后,你不要到这里面去看,你是看不到它的,而是要到服务器里面,你部署的那个应用下面去看看,能听懂这个意思吗?好来吧,那我们把这个说明白以后呢,这个地方我们就可以来做一个具体的处理了啊怎么处理啊,你这个文件都拿到了啊,你这个文件对象你都拿到了,拿到文件对象以后,后续的操作不就是基于这个对象想办法把你那个文件对象是保存到我们的本地啊,对吧,OK,来我们就来看,那么这个里面有什么东西呢?我们可以获取到,呃,获取到。
13:37
我们这个上传文件的名字啊,这是我们要关心的事,好,怎么获取呢?阿罗的file,什么name等于什么呀?就等于upload file get,有一个original,什么file name,这就获取到上传文件的名字了,然后呢?呃,你光过知到它还不行啊,我们还得拿到流,拿到流以后我是不是还能把这个文件给它写出去啊,对吧?就是我们来获取我们的输入流,怎么获取输入流呢?那就是A的stream啊,I等于什么uplo。
14:13
Fair就这个对象里面呢,有一个get的stream,这就获取到输入流了,那么将来我这个文件要写到什么地方呢?那它有个异常啊,给他声明一下,将来我这个文件要写到什么地方呢?我是不是要去写到我这个uplo这个文件夹下面呀,所以说呢,我们还得去获取什么呀,哎,获取我们的服务器端的这个up losss文件夹的,哎,一个什么真实路径,明白吧,怎么获取真实路径呢?那我们又得用到我们的,So,因此呢,我还要再去声明一个什么呀,啊,比如说我还是用这个http session吧。好,拿到session以后呢,我们就可以获取我们的SC,就等于session.get然后我们怎么获取这个真实路径呢?你看了哈,就是string real pass就等于S sc.get有一个real pass,你把这个uploads这个文件夹写到这儿,那么这样的话呢,他就获取到我们服务器端诶这个文件夹的一个真实路径了,那么拿到这个真实路径以后呢,我们接下来呢,就希望往这个文件夹下面呢,去给它保存一个文件啊,那我们就去描述一个文件,就是fair,比如叫做什么target fair等于new一个fair,那么new fair的时候呢,我们需要把这个真实路径就是这个real pass加上,然后呢,放到这个路径下面,我们再加上个什么东西啊,斜杠这个路径下面呢,我有一个文件,什么文件呢?比如说我还是叫我的这个名字啊,叫做什么呀,You upload fair name。
15:55
能看明白吗?这样的话就相当于什么呀,相当于我通过一个文件来去描述了我的一个上传过来的这个文件。
16:06
听明白了吗?这个能看懂吧,OK,那么这个文件呢,只是一个内存里面的啊,就是我做了一个描述,那么接下来我们要做的事情是什么呀。啊,接下来我是不是通过输入输出流把它写到我这个文件里面是不是可以了,对吧?所以说我们要去用一个什么输出流啊,就是我们的fair output streamam啊,Output stream看到了吧,哎,Fair output streamam啊,然后呢,FOS吧,好等于什么new,一个fair stream,然后new的时候你就可以把我们的target file写进去了,好接下来要做的事就是什么呀,从你的输入流里面去读,然后呢,再用我的输入出流往出写是不是行了,所以说你看了哈,接下来我们就是哎,写文件好定一个int I,然后呢,Will。
17:00
为了什么呀?就是in.read读回来以后呢,我把它赋值给I等于它,然后呢,整个这个好,整个括起来什么呀,还记得吧,这个括起来不等于。什么东西啊,负一吧,那么不等于负一代表着我没有读到末尾,那我接下来我就可以通过OS掉2RIGHT,把这个I往出写是不就可以了,能看到吧,那么最后写完以后呢,我们再后把这个I点给它close掉,把这个OS呢也给它close掉,那么这样的话呢,我们就把上传过来的这个文件呢,就成功的给它保存到我们服务器端,诶那个upload这个文件夹下面,并且呢,名字呢,还是跟我们上传的那个文件名字是一样的。听懂这个意思了吧,好,那么最后的话呢,你这个还得回到某个页面啊,比如说你上传成功以后,那就回到这个萨克萨斯页面吧,我们就让他来到我们的这个啊,唯用下面的我们给他用上一个哎,JSP啊,我们就叫什么呀,JSP fair,我们就叫做点JSP好就让他来到这啊来H1能看明白了吧,OK,好,那么这样的话呢,我们就诶可以来演示一下,看看能不能上传成功啊行吧,来吧,我们来测试一下。
18:38
OK,来吧,我们通过外面浏览器打开啊,好操作一点。没拷贝出来,好拷贝到这啊来我们来访问一下,那么首先呢,呃,你要去给他选上一个这个上传的这个图片是吧?啊,我们比如说就上传个图片吧,上传个什么图片呢?这个刚刚下载的那个在哪了啊,拷贝一个出来哈啊是吧啊。
19:12
来拷贝到这儿啊,OK,那我就选中这个图片,大家注意了啊,我来上传,上传的时候我来选择选择谁的选择我这个桌面啊,桌面呢,有一张图片,来桌面有一张图片。图片呢,在这儿是吧?OK,打开,然后描述呢啊,比如说告诉他这是个美女是吧啊啊美女美女是吧啊是吧,OK,这个写好了啊,然后呢,我们来上传一下啊注意走哎,他说什么了,他说require的字符串,什么DA,什么not,什么percent,这啥意思啊。这什么意思啊,传啊,DSSC是不是出现了问题了,那我们就来看一看啊,怎么会出现问题呢?首先我们来确保我的index,它叫做什么DSC没问题吧,然后呢,我们在上传到后台的时候呢,注意DC给到这个string类型的DC里面好像没问题呀,那怎么了呀?
20:18
啊,再来看看哈,我在上传的时候,你看哈,这个文件描述我写上了,就是一个普通的文本,然后呢,我们看看页面源代码啊,查看网页源代码,这不也叫做de sc吗?没问题吧,然后呢。Post阿洛的这些都是没问题的是吧?为什么告诉我有这个问题啊?看一下啊阿的DC啊,Request parael,把我们的DEC给到这个字符串的DEC里面,把upload file给到我们的music park file里面,没有问题啊,怎么会出现这个问题呢?再来试一下哈。
21:07
刷新一下啊。好,选择一个文件啊试试啊,看看是不是还还会不会有这个问题啊。还是第1Z的问题是吧。Uplo的tap等于text,然后呢,Name等于DC。这有啥问题吗?啊,稍等一下啊,我先看一下我这个上传这个处理。它有没有这个成功啊啊,应该是没成功的啊,来看一下,稍等一下啊,我们找到我们的部署目录啊呃,零三里面uplo下面没有东西是吧?那说明还没上传过来,没上传过来是什么原因呢?Multi part mut form加data这也没问题啊。
22:11
你去爱。稍等一下啊,我先把它去掉看看啊,到底是什么原因啊,我先把它先先把它去掉啊,注意啊,先把去掉,去掉以后的话,这个地方呢,我也得把它圈去掉了啊,这个先把它去掉。好,先把它去掉啊,去掉以后我们再来试一下,看看行不行啊。好,来注意了啊呃,去掉以后呢,大家注意,我们来试一下看看行不行啊,如果不行的话,其实就不是那个DEA的问题了,对吧,就得找其他的原因了啊,大家注意,现在呢,再来访问一下,回去来刷新好它这个我们就诶我去掉了呀,怎么还在有。有缓存了是吧,那这描述已经去掉了呀,对吧,那重新啊换个浏览器打开啊,应该就会好一点,好它这个应该是有缓存了啊CTRLC来这个CTRLV。
23:20
稍等一下啊。OK,来看一下怎么还有啊。哎,这样吧,我就不给你演示这个错了吧,我直接告诉你原因吧,好吧,来吧,啊生气了是吧?来我告诉你原因啊,原因不是在这儿,听到了吧,啊,原因不是在这儿啊,也不是在这儿,然后呢,后面的话呢,我们这个该加的你还都给它加上,听到了吧,这个我们现在写的这个代码是没问题的,问题出现在哪了呢?出现到这了,我们在配置这个multi的时候出现了问题了啊这个地方呢,大家一定要注意,就是你配置这个病的时候啊,我们必须要给他一个ID,能理解吧,我们必须要给他一个ID,如果你不给这个ID,那么其实他这个是不生效的,你配的这个东西是假的,为啥呢?一会我给你解释一下,而且你给的这个ID呢,还必须得叫这个名字。
24:30
啊,必须得叫这个名字,就是叫做serve,必须得叫这个名字,如果你不写这个ID,而且也不叫这个名字,你配的这个东西就是个假的,他是找不着的,能理解吧,来吧,我就告诉你原因啊,原因就在这儿了是吧?啊我就不再卖关子了啊啊那把这个改完以后呢,我们再来试一下哈,啊感觉你们被耍了是吧?啊还在啊,你们就喜欢看我报错嘛是吧?OK啊,那把这个改了以后呢,我们再来看一下啊,那这个无所谓了,你用哪个浏览器都行了是吧?啊刷新一下,然后呢,选择个文件啊,选择上一个文件叫做什么,哎,他然后呢,啊,这是一个美女啊上传你看成功了没,成功了吧,这是肯定是没问题的啊,然后你现在要去确保一下到底有没有上传成功,来来到我们的部署目录,然后呢,SPA03RLO下面看这个文件有没有。
25:28
是不是上传过来了,大家注意哈,这个地方是有的,那这里面有没有啊,这里面是不可能有的,你再刷新它都不可能有,因为我们压根就没有上传到这儿,我们是把它上传到哪了呢?就是上传到我们服务器端的那个路径下面了。听懂了吧,OK,所以说呢,这个位置我们一定要注意的一个问题是什么呢?就是我们在配置的时候必须要哎把它配置成music sub好,为什么呢?我们接下来给大家去讲解这个原因啊。
我来说两句