00:00
然后呢,下面我们来看文件上传啊,文件上传的话是文件上传,它这个需求基本上就这。那要让用户把他自己电脑呢,那把他自己电脑的文件上传到服务器上面,他肯定是呢,用户发起这个上传的流程怎么发起,他肯定去访问一个页面,当咱们这个地方就是个摩擦窗口。这个页面上面有什么,有一个表单,这个表单是什么?就是一个文件上传的一个表单组件,这个组件当然咱们以前学A时候应该学过,它应该是个input typeb等于fire这个这个什么,这个表单文件上传的表单组件。然后这个组件干什么?就是让用户选择他要上传的文件,知道吧,那怎么选择,那用户打开这个页面之后,一点它让他选择他一个文件,他本地的一个文件,那选完了之后呢,一点提交按钮好了,把这个文件随着请求一起发到后台了,那后台CTR这要有什么要接收这个请求,并且能够什么从请求里边把这个文件拿到,拿到之后怎么在服务器磁盘上某一个目录里边生成一个同样的一个文件,并且把接收到这个文件内容写到里边去。
01:11
这样的话,就相当于把用户自己电脑的一个文件传到服务器上面了。这就叫文件上传,知道吧,当然如果成功了,告诉现在成功了,文件上传成功,如果失败了,告诉现在文件上传失败,这样就行了。所以大概就这么一个过程,这个过程,所以大家从这个过程上面大家也能分析出来,那我们说文件上传有用户参与的,又有后台CR参与的,所以它是个外部层的技术,我们要做这种功能,既需要前台又需要后台。所以我下边准备给大家写一个简单的小例子,这个例子写一个JSP页面,让用户是吧上传他的文件,后台提供一个ctrler接收这个请求,并且把文件拿到,拿到之后在服务器磁盘上随便生成这么一个文件就行了。好,这是我们说老师,下边我就准备通过一个小例子给大家来演示一下文件转牌,那我写它的话,这样同样从前台后台都有,那我们这个地方先提供一个页面,这个页面我就叫叫这个我随便起了叫fire upload upload就downloadload是下载,Upload是上传,对,然后test叫JSP,在这个JSP上面我准备提供一个表单,当用户一提交这个表单,这个表单里边有一个什么文件上传的组件,当用户选完这个什么,选完这个文件之后,一点提交按钮,然把他选的这个文件随着请求发到后台就行了,这是我们说这个前台,然后后台呢,我要提供一个CTRL了,这个CTRL我也不新建CTRL了。
02:44
我就在咱们这个CTRL基本上加加加方法市场活动CTRL,因为它我这个地方主要是给这个CTRLL,主要是给这个市场活动什么这些相关的功能做演示的,所以我直接在里边加一个方法,这个方法干什么,这个方法就接收到文件上传的请求啊,然后呢,从请求里边把出个什么上传文件渠道就行了,知道吧,所以当然这个地方,那我这个地方这个方法呢,我就简单写一下了,这个我就叫fire upload upload,然后呢,这么一个说法是吧。
03:16
然后呢,在这个方法里边,它就接收请求,并且获取文件,然后拿到文件之后把它生成到服务器上,保留目录里边就行了。好,这是我们说的简单,给大家设计这两个代码,演示一下这个文件上面一个一个来做,我也不画流程了,因为它这个太简单了,就两个代码,我也不从底层开始写了,我先从顶层写啊,因为它太简单了,所以我先写这个页面,那这个页面我在这个地方写个测试页面吧,然后呢,我们这个地方来写个测试页面。然后这个测试页面我们来一个,那测试页面我还是写到外部APP下测试方便,然后呢,这个地方来一个测试页面,然后呢,这个地方我们给大家演示文件上传,文件上传。
04:02
那演示文件上传一会要向后台发请求,发请求需要用的ul,我们所有的U从贝斯标上去找,所以我这个地方直接把这个怎么拷过来拷贝,然后呢,这个地方来拿到它,这样就行了,好这样就行了,然后呢,在这个页面上面,我准备这样提供这么一个表单了,文件上传的一个表单知道吧。那文件上传的表单,那我这就来提供了,那表单在上怎么写啊,对这边来个form,对form标签这个表单知道吗。然后方物标签,方物标签里边有啥对I个谁表示什么啊,将来是不是一个UR啊,对,你要把这个请求放到哪去是吧?后边还有什么对method表示什么?对提交方式可以取get或者取post是不是这样的?对这是我们这,然后呢,这是我们这个表达,然后呢,大家看里边写什么呢。
05:00
是不是写那些input标签什么之类的,对我们这个地方input标签,写一些一系列的input标签,这里边是吧,这里边写input,那这边写一系列的这input这是等等这个文件上传肯定写文件上传的input是那文件上传什么什么的,我一会儿给他写那吧,那最后是不是还得提供一个提交按钮啊对,你要是如果没有提交按钮,那我用户填完了之后不能提交也没用是吧?所以我们这个地方提交按钮,那这个提交按钮是一个什么,对萨me,然后呢,这个地方来一个提交按钮,上面显示显示几个文字吧,这个我就叫什么,就是上传也行,你点提写提交也行,你想叫啥叫啥这样就行了,这是我们说这个大概这个表单案就这样了,但是这个表单我们这是我们以前写表单案时候,大概就这么写。就是以前大家写表单的时候。把我们现在文件上传的表达跟你以前写的表达稍微有一点点不一样。他要满足三个条件才能把文件传上去。
06:01
如果这三个条件缺一不可,如果缺一个你都传不上去。就是文件上传的表单必须满足三个条件,哪三个条件,我这个地方给大家简单总结一下啊,简单总结一下就是文件上传的表单件上传到表格不能随便写,必须满足三个条件,必须满足三个条件知道吧,缺一不可知道吧,它跟普通的表单不一样,知道吧,然后第一个条件知道吧,第一个条件就是这种文件上传的表单,然后呢,这个表单的组件,这种这个表单组件组件只能用啊啊表单组件只能用这个组件哪一个,我们说文件上传的这不是这个表单组件标签,这个标签吧,有很多表单组件标签,有很多表单组件的,大家我们平时学的表单组建表就太多了,有哪些表单组建表招,我们趁着这个机会给大家简单回顾一下。
07:05
也因为这个风。标签里边有很多表单,这种input的标签等等这些这些都叫表单组件标签,表单组件什么意思?就让用户是吗?可以把他的数据通过这些标志能够提交到后台呢?这些都叫表单组件标签,那大家平时学的表单组件标志有哪些?对,一个是最常用的就是input是吧?Input是不是有很多input?那通过type属性是不是可以区分出来有是哪一类input,那这些type都是有哪?有哪些类型的input标签呢?最典型的是不是单号问号还有什么?对密码框是吧,还有啥对radio是吧,单选按钮还有啥?对复选按钮叫复选框还有啥。对对,下拉这边也是,但是下拉这边不是音铺的是吧,还有啥隐藏玉是不是。
08:07
还有啥吗?对,还有这个八层,这已经出了,还有啥。对萨密也是也算一个,虽然他不能提交数据,但是他也能够说也是表盘组件知道吧,还有啥赛的,对这个也是还有啥。好像就这几个了是吧,音扑标就这几个,除了音扑标车那些表达组样还有啥?对还有这个是吧?还有一个咱们刚才同有同学说了哪一个这个什么文本区域是吗?叫test every是吗?T2还有啥呢?说以前学的只有这,基本上就这些了,对用一个字代替,再有知,再想起来自己再再加知道吧,啊基本上就这些了,常用的其实就这些了,知道其实还有一个,这地方还有一个叫什么,这个平时很少用,是这个是啥就上传文件的,这个就上传文件,这是我们以前学过的表单组件知但是什么这么多的表单组件,如果你要上传文件,只能用这个。
09:29
他才能上传文件啊,也就是说只能用这个,只能用这个标签。然后呢,这是这个input type等于fire只能用它只能用这个标签,这个标签什么意思,这个标签你只要在页面一显示这个标签,它就显示这种效果什么效果,浏览器直接就显示这种效果什么效果,就这样上面有个浏览俩字,后边带一个点点点点点点什么意思,就提暗示你这个地方可以点了。
10:03
点了怎么了,它会自动加上单击时间一点,它会弹出来这个对话框,让用户去选择它本地电脑一个文件去选完了之后一点打开,会把这个文件复制到这个什么表单组件上面去,并且把这文件名写到后边,这就这个,这就这这就是这个什么文件上传的这个表单,它的这个效果就是这样的,所有的浏览器只要是显示这个标签,就是做成这种效果的,它会自动加上单击时间知道吧,这是表单组件,所以文件上传只能用它,知道吧,这是我们说的这样,这是第一个条件。这是我们说这样,所以说当然我们这个表达组件这个地方只能写,只能写啊,当然我们说真正提交后台的这个参数,还得给它起个名字,这个名字在后台接收,到时就按照这个名字去接收,作为参数名,这个参数名你随便起了,我这个地方,假如说我就随便起了,我就叫买法,将来向后台提交这么一个参数,这样就行了,好,这是我们说的这样文件上传表的只能用是吗?必须用它,或者就或者说必须用它。
11:12
必须用这个标签是吧?啊你说老师那他文件上传的时候,除了能够上传文件,还能不能一点提交,除了能把文件提到后台,我想提交一个字符串,可不可以也可以。但是你上传文件的时候,那个文件,那个表单组件只能用它。我也可以同时再向后台提交一个参数。这个参数可以是个字符串,那什么你比如说我再写一个单号母块,来一个type,等于啊,然后呢,这个东来个T,这也行,Name随便来一个,假如我就叫user name行了。嗯,这样就行了,将来一点提交按钮,除了把这个文件提交过来,也把这个字符串也能提交过来。
12:01
但你说我能提交这些可不可以?当然都可以。他跟什么文件上传的表单组件跟别的表单组件不冲突,可以同时向后端提交。是吧,但是你要上传文件只能用这个啊,必须用它,就这个意思,好这样,当然我们这个地方大,跟我说每一个显示的时候都给它换个横,都给他换个横,知道吧,这样要不然它显示的一行时不太好看一会。好,这是我们说的这样的话,大家这是第一个条件,大家知道就行了,文件上传必须用它,那么这是第一个,好,第二个,第二个条件必须满足到哪个条件,请求方式,请求方式只能用,只能用post,只能用post,不能用get。只要是文件上传只能用post,不能用get文件上传,那大家想一想为啥只能用post,不能用get,那那你分析一下为啥这样呢?对吧?那你看post和get有啥区别。
13:04
那你就看看它俩有啥区别,你就知道为啥用它了,对盖和po有啥区别,信息直接在U对信息写的数,参数写在URL里边是吧。然后pose呢?对请求题里边是吗?然后还有别的区别吗?这是一道面试题工作,嗯,写到参数下地址,然后别的呢?还有别的吗?对,有的参数,该的参数长度有限制是吧?POS理论上没有限制是吧?还有别的吗?对该的可以使用缓存,不能使用缓存。还有什么?
14:02
对,差不多,反正这几点时候,当你以后你以后面试的时候也有可能会遇到这个,这个这个题应该很大几率会遇到这个题,这个基本上面试的时候都有这个题啊,所以大家要总结一下这一个题的他们的这个区别,其实他们最主要的区区别就是什么呢?最主要的一个区别,就大家说那些区别,就是有一个区别引起的,知道吧,他俩最主要的一个区别就是向后台提交参数的方式不一样,知道。就他俩都能向后台提交这个发送请求,但是发请的时候向后台提交参数的方式不一样,那方式怎么不一样,大家我们都知道盖的这种方式是吧?是放到URL后边将获得提交参数的,那URL放到哪了?对是么?URL放URL放到请求图里边是吧?放到请求头是吧是吧?地址栏也属于请请求头地址栏里边内种也放到请求头里边了。所以说什么,所以总的二项的话,这叫什么,我们说get的这种方式是参数什么参数是放在什么,通过请求头啊,通过请求图,请求图提交到啊,提交到后台,后台啊请求图啊,什么叫请求头,但是我们一开始学外部的老师给大家讲过HTTP协议分为什么就请求投协议,什么就请求协议和什么响应协议,请求协议里分又分为什么请求投入请求体系,响应协议里边用什分为什么响应投入响应体是吧?啊所以这些都是在外部的理论,这些很重要的理论,所以大家可以像没事到时候前面翻一翻以前那些理论,这些将来是指导你写代码的是吧,指导你的思路的是吧,这些啊所以这是我们说的,那通过请求图,然后呢提交后的,那怎么经过请求图,那就放到ul后就通过什么就拼接在ul后就拼接在ul后就。
15:57
参数放在ULURL啊后边知吧来提交的,那么po的这种方式呢,就参数通过请求题,请求题然后呢,提交到后边,提交到后边,这是我们说它是放到请求题里了,那请求题怎么放到,那还是还是又是协议了啊这些这是我们说的,这那放到什么,那这他们通过这种方式提交参数怎么了?那那这个时候就有问题了,有啥问题引起了一系列的不一样了,怎么不一样,它的参数放到URL后边,那放到urr后边,参数你想一想大看什么样的数据才能放到UR后边。
16:41
对,简单的参数字符串,简单的文本数据才能拼到UR后边,我让你把一个文件拼到UR后边,你能拼吗?对,我想把让你个让你把一个视频拼到UR后,你能进吗。就你拼不了是吧,所以说大看说这种盖掉这种方式只能向后台提交文本数据,什么叫文本字符串数据,就只能这种方式只能向后台,向后台提交,后台提交文本数据或者叫字符串数据,知道吗?一些二进制数据提交不了二进制数据提交过什么二进制以字节为单位的数据,拼URL后边拼不了UR后边只能拼字符数据。
17:26
叫文本数据知化学化就是字符串数据知二进制数据,像那些有格式的那些文件,视频、音频,以字节为单位存储的这些什么,它就不能,那这是什么,只能用post证号,Posts证号什么就不但能什么既能啊,既能提交对文本数据或者字符串数据,然后呢,又能提交,又能提交。对又能够,嗯,提交提交让他对二进制数据,就是跟文本数据相对应的一个二进制数据,知道吧,还有大家再再来那放到URL后边提交参数。
18:09
那我们都知道URL是显示地址栏上面的,不同的浏览器,这个地址能显示的内容是有限的。你不能无限制的往地址栏里边敲内容,那你说到底这个限制多少?不同浏览值不一样。有的IE和火狐D栏上能存储的这个什么地址啊,这个UR这个长度是有限制的。不管是多少,不同的专就不一样,不管是多少都有限制,不能无限制的行啊,所以说大哥你要如果通过地址栏将获得提交数据,那你这个数据不能太长了,超过限制提交不过去了,所以我们说该的这种方式对于参数,对参数的长度有限制,对提交的参数长度有限制啊,有限制为什么有限制?就是因为有浏览,就是因为浏览器地址栏对长,对浏览器对地址栏长度有限制,所以对参数才有限制。
19:03
反过来,如果地栏这个长度没有限制,它参数也没有限度,就是因为浏览器做的这个事儿,知道吧,这是我们说那posts这种方式,它不放的UR后,那它这么参数就不受UR这个地理的限制,所以理论上来讲,理论上理论上来讲。理论上让对长度,对参数长度没有限制,没有限制,这是这没有限什么没有限制,但我们也有体会,就你平时做的哪些软件,你比如说你比如说那种这个,呃,就是上上传文件的那些,你比如说像像这些邮箱都有那种是吧,附件那种功能,对那些功能,你就上传文件那个文件那个他那那种提交请求的方式肯定是POS。啊,你上传文件,你不管上传多大了,它只要网速允许,基本上都可以,有的人都可以上传这几个G知道吗?你只要网速允许,它都可以生成,所以这一定是投知道吗?还有大看还有什么呢?该的这种方式,我们说它呢,参数放到地址栏后边,那地址栏,地址栏是暴露出来的,那暴露出来那时参数相对是不是不安全。
20:22
对参数不安全,那谁都可以看到地理老师这参数那参数啊,相对这种参数不什么数据不安全不安全不安全懂吗?那公司的这种方式放到请求题里边肉眼看不见,所以我们说从安全性来说,相对安全,相对我说的是相对安全,他也不是绝对的,怎么不是绝对,你放到请求请求体里边肉眼看不见了,别人通过一些技术手段,可以通过网络抓取你的什么数据包。这是对于专业人员来讲很简单的,知道吧,但是我们要说这这相对对于肉眼普通人员而讲的话,那是相对安全,知道吧。
21:02
好,这时候我们说到这get post,大家会看到,我们说给大家列出来这些好像是。好像都是POS的好处,你看吧。这几个好像都不好,初中。好像get好像没啥好处,一无是处,你知道吗?那为啥还有get吗?对,存在即合理是吧?他存在肯定有存在的理由,如果他全是他的缺点,没有优点,那你早就把他网去掉了,那他他他他有啥优点吗?对,Get这种方式效率高,效率高,效率相对较高,怎么效率相对较高,就是它数据直接什么不管什么参数,直接放到urr后了,不需要对数据做任何的什么数据的转换封装,直接随着urr一起发到后S了。那么POS这种方式呢,放到请求体里边,你得按照请求体的格式进行转,怎么转,其实不让我们转谁转浏览器转,浏览器转它也是通过代码转的,它执行代码了,所以效率相对较低,知道吧。再一个get这种方式能够用缓存,怎么用缓存。
22:13
那我们接着再看,我们说向后台,你向后台发请求的时候。如你要你要上后台发,你要后台给你回一个网页,假如你向后台发一个请求,请求一个网页,后台给你返回一个网页了,如这个网页上面如果有些静态资源,什么叫静态资源图片,对还有还有啥还有啥呢?CSSGS等等这些文件,如果有这些文件,然后呢,你若如你要如果上次访问的页面里,访问这个页面的时候,这些文你访问过一次了,那么什么浏览器会把你这些静态资源都给你缓存到某一个目录里边。都给你划存到某一目录里边,缓存某一个目录里边懂了,你下次再访问这个网页的时候呢。如果这个网页里边又用到这些资源了,这个时候这些资源不用从后台再传到浏览器传一遍了,只需要把这个页面的框架传一下就行了,然后呢,用到的那些什么图片CSS,然后这个页面用到的话,直接从缓存里边取。
23:11
这样呢,对网速要求就比较低了,这样效率高,嗯,所以这样要高,特别是那些什么,你说我访问的网页本来就是静态网页,整个网页就给你缓存起来,就你要建立一个HT8网页,整个网页就给你缓存起来了,你下次再访问这个网页,压根就不像后台发起求,直接把缓存里边这个网页呢,只要地址栏URL一样,然后呢,直接从浏览缓存里边取出来给你显示到浏览器上吗?你就看见了这样什么,一个是节省了用户的这个什么网速,再一个呢,对后台不用向后台发请求了。那后台的话,减轻了后台处理启的压力了,知道吧,所以它的效率比较高知吧,那POS的这种方式呢,它不能使用缓存,他不管访问什么数据,都得从后台服务器把这些数据是吧,图片啊,CSSGS还有页面全部这么从后台传到浏览器传一遍,这样的话后台服务器压力比较大呀,再一个对用户网速要求比较高啊,占流量啊这些,所以说大概我们说posts这种方式吧,效率低,这种方式效率低。
24:21
好这个什么,它当中效率效率低相对诶相对较低啊,这是我们要posts这种方式。所以这是他们这个区域,大家可能我前面给大家讲过一句话,说什么说大家现在发请求能用post就用post,尽量别用get,诶你说老师这种效率,该效率这么高,为啥不用它。就是因为大家伙们开发的时候就是因为它用缓存了,那用缓存效率高,咋不用缓存了,当我说用缓存了,对你开发造成很大的不便,怎么不便了,假如有些静态数据,或者一些甚至一些静态页面,如果你开发的时候,然后呢,你开发的时候就假如说你什么上次写写错了,你假如你改了一下子一些静态资源,你改完之后呢,对没效果啊,为什么他还用以前你缓存了,所以你改完之后没效果,那怎么办呢?清缓存你要用盖账号不停的清缓存,这样你开改的一些代码的话才会生效,知道吧,所以对对我们而言的话,开发者本来就是么,很忙,是工期很紧,还得加班,没不停的清缓存,干扰性太大。
25:46
这是我们这这是我们说的,这那你说那用POS效率不是不低了吗?当然这种效率其实他对我们的这个项目的影响是完全可以忽略不计的,对我们一般的项目都可以忽略不计的,因为你要靠他提升这种效率。
26:04
基本上不靠谱啊,基本上不靠谱就是用它提高效率,知道吗?啊,我们真正提高一个项目的运行效率就是什么?从数据库的设计,从后台算法,从我们的代码优化的角度上来讲的话,来优化提高我们项目的效率,靠这种浏览器请求方式提高效率完全可以忽略不计,但是只有什么某一些特殊项目才考虑这种缓存拿什么项目,最典型的一类项目叫什么门户网站是吧,因为因为什么门户网站在看,大家都是看数据的。而且他那些数据,每一个页面上面的一些一些内容呢,基本上都是各自的内容都是不一样的,知道吧,所以用户看完之后,他那不是动态页面,都是全部都是静态页面,门护网站页面,当那数据全部都静态的,都不是动态的,知道吧?啊为什么动态的效率太低,都是静态的,然后你要是什么大家不停的看着门户网站的一些页面的话,你这次看第一次看到给你下载的缓存浏览器了,下次再看了,不像后台了,不像后台发行了,直接什么还看这个网页的话,还给你把把服务,把这个流量,把这个缓存里边数据调过。
27:13
这样的话的话,它这效率就比较高了啊,因为没五网站并发访量特别大,而且里边资源很多都是静态的啊,要么都是网页,要么都是图片是吧,要么都是图片,要么就GS34GS4等等这些知道吧,所以呢,这一类除非你做这一类网站才考虑用这个缓存。知道,如果你不做这一类,不做这一类网站的话,一般来讲我们不考虑这一方,从这一方面来讲,我们不考虑这这一方面的优化,知道吧,所以大家知道这个技能,那相对于我们说,当然我们说你说老师我普通的项目用盖不也能提高一点效率,是能提高一点效率,但是你相对于给你开发造成这种这个什么麻烦而言的话,这种效率完全可以忽略不计,所以我们前面给大家说了,能用pose都用pose,知道吗?这是我们说到这儿啊,要不然的话你得经常清皇宫好吧。
28:02
好,这是我说,但你说老师,我实际上有的是,我不怕清房东。那那就另说了是吧,那就另说了,那你要是说开发工期不紧不紧,你天天上班的时候还嫌时间过得慢呢,那那那是吧就吧,还还嫌这个是么,还嫌还嫌这个时间的么,太太多了是吧,那你可以的么?没事,你可以折腾出来一点事是吧?啊但一般来讲我们不会么,不是这样好这是我们给大家讲的,说一下这种post的,这是我说那大家看看他们的这种什么get posts这种区别有他们的区别,你能不能现在能不能理解文件上传的时候只能用POS的。能不能理解,对,可以理解,一方面是什么,我们上传文件都是二进制数据,不是字符串,所以只能用POS,再一个我们上传这个文件有可能很大,那这这个长度如果用get的有限的,这是我们说的这别的这些其实不是为了文件上传设计的好,这是我们说到这儿,所以这个地方只能用poose。
我来说两句