00:03
来咱们继续啊,把这个文件上传到咱们看一下。呃,现在呢,咱们这个数据呢,就可以发一下了啊,来看一看,咱们再把这个文件选中简历。打开之后呢,点提交,嗯,看这个文件是不是就发过去了,但是这个文件发呀,大家看啊,发的这个文件呢,上面啊,这个是什么信息啊,上面这个东西它是一个。我们那个普通的放元素吧啊。它中间你看啊,它有没有规律啊,你别看这乱七八糟的啊,它其实是有规律的,它一方一方的啊,你看。是吧,这个发的是什么用户姓名嘛,往下发的是不是才是简历啊,嗯,他有他有规则,他有咱自己的规则,你这个不用管啊,这发过去了,那么接下来呢,咱们来看一看。来这样啊,这个咱们听一下行了,关掉浏览器关掉啊,咱们一起来做一下,首先呢,这边会提交这个东西,提交过来之后呢,找到这个类啊,这个类呢,我们来编程,编程的话首先确保啊,你这两个账包已经倒过来了,The commons I和commons file upload。
01:21
首先这边呢,首先第一步啊,你创建。硬盘文件工厂。硬盘文件调控工厂啊对象,这个对象呢叫做Dis。File item factory。这我说一下,一般的组件呢,我们用的时候呢,编程步骤都比较固定的啊,所以呢,这个东西呢,我说了你就能够快点把它接收一下就行了啊,咱们把这个文件条目工厂的new一下。
02:00
好,接下来呢,我们需要调factory的一个方法叫site repository,还有一个叫SITE2个方法啊来这个方法叫site site这两个方法第一个第二个这是干什么用的呢?你看这个是干什么用的?是仓是仓库吗?是不是仓库啊啊。这个不知道,你就你就记住就行了啊,这是仓库的意思啊,它呢其实用来设置什么,设置我们的临时存储目录。我们大家都知道,文件上传的时候,他不可能把这个文件全都发过去了,他可能只有发,比如10KB10KB的发啊发过来,那这样的话,我们在这边大家想一想,如果这个门店本身没有超过10KB的话。是不是就不需要这个东西了,但是如果你这个文件要是超过你现在是两兆嘛,是吧,那这样的话,这个临时目录肯定会用到,所以上面这个方法我再说一下,这个是用来设置我们一次浏览器向服务器发送的数据量,发送的最大数据量一次啊浏览器向服务器发送这个文件呢,如果这个文件是一个G的文件,它得发送N多次呢,才能发过去呢,那这个时候我设置一次最多发多少?
03:19
来说一这啊浏览器设置浏览器向。啊,或者是设置服务器吧,一次可以。接收的什么最大啊数据量,服务器这一端啊,这端啊,如果吧,如果文件过大啊,服务器端需要分什么,分多次接收该文件,明白吧,所以设置服务器一次可以接收的最大数据量。一次可以接受啊,注意一次。这边呢,咱们呀,写成4KB就差不多了啊,四乘以1024,但是你要知道咱们这个文件是。
04:09
两兆的文件,显然我们这个东西它不能一次接收接收完毕,因为一次接收4KB嘛,得接收呢N多次吗?所以这个时候大家想想这个地方需要设置什么,设置文件的临时什么存储目录,但是这个有没有可能用不上啊,这个有可能啊,如果这个文件是3KB文件,这个文件只有3KB。那你这一说一次就接收完了吧,所以这个时候呢,你这个设置设置一下这个啊,这个参数什么参数,大家看看这个参数需要跟一个。File。是吧,所以这个时候呢,我们把这个fair new出来,嗯,这是不是需要一个pass啊,所以这个时候我们写一个pass啊,叫time pass time pass临时文件的存储目录,比如说你现在呢,在这可以给它加一个。
05:05
目录点右键你有一个什么。Folder。用一个folder出来啊,另外一个folder表示文件夹就是temp吧,行吧,Tap type行放到这。临时的放到这,但是最终你这个文件是不是得上传完之后,是不是得放到某个目录目录下呀,Up file啊,最终文件放到这个位置上,但是这呢需要有临时目录,所以这个时候呢,你需要设置这个路径,这个路径怎么设置啊。嗯。这个路径怎么获取?怎么获取这个文件夹的路径?这个没有在class pass里边对吗?S2C下边是不是在在class下边啊,这个文件怎么获取啊。
06:01
你学过一个方法吧,这是个什么类啊?撕出来了是吧。继承嘛,所以这个里边有个方法还记得吗。叫什么?This,点它有一个get so con,这叫so上下文。上下文里边有个方法还记得吗?叫get real pass。这是在哪天讲的来着,这个。我们可以回顾一下啊,就是在那个course,然后零六吧。然后这里边document吗。叫contact吧,打开你看这里边不是有一个方法吗?叫get real pass吗?Get real pass,是他吧?哎,这个要求在web根下边必须得有一个文件,叫什么index路径,是不是才能这么写呀,所以现在你这个怎么写就行了。
07:04
嗯,你看你这个文件夹在哪,是不是在根下,所以这边直接写个杠是不是就可以了。这个路径直接写成杠什么camp fair。是不是就可以拿到这个路径了。你可以把这个路径输出一下。Time class把这输出一下行了,我们可以测一下。这边呢,我就关了它了啊嗯,打开浏览器,我来访问一下,我们先确保一下啊,这个程序能够拿到路径啊,如果拿不到这个路径的话,你这个程序可能会有问题,因为我们毕竟这个文件是两兆的。来选上选上打开走看。这儿啊。A party comcat that APP file up。File up是项目吧,下边有个time file了。
08:03
是这个文件夹吗?这个路径没问题吧,好,没问题就用它啊好了,这边呢,我也不再输出了啊,其实就是第一步创建工厂,第二步呢,就是设置我们一次可以接触的数据量,第三步呢,其实就是设置什么临时存储目录,接下来来看核心啊创建,创建啊核心对象啊,这个对象叫serve file upload啊,File upload。这个file upload需要new一个什么呢?Serve file upload这个呢,其实专门完成文件上传的一个核心对象,而这个对象需要传递一个什么工厂对象,你把工厂的相关设置传给这个核心对象就行了。我再说一下啊,第一步创建文件硬盘文件条目,硬盘文件条目工厂有的老师,什么叫文件条目呢?我说一下啊,其实啊。
09:01
什么叫文件条目呢?这个叫文件条目。来我这边点它ABC,点它来点这个打开,然后大家注意文件上传在这个放表单里面,有没有可能是上传多个文件,除了这个文件之外,有没有可能还有其他的文件啊,有可能你在那点提交的时候,大家看下边就知道了啊,看这个位置上,从这个位置开始到这个位置结束,这属于什么?这属于一个文件条目。从这个位置开始,再往下走,这是一个文件条目,明白什么意思吧,如果下边还有一个个人简历,再来个文件的话。嗯,比如说有简历,就像照片吧,照片那这个时候也是个文件条目,所以说他把这个看成什么文件条目,把这个看成什么文件条目,把这个看成什么文件条目。整个这是什么?这是个form表单。他把form表单里边任何一个元素都看成什么文件条目单词叫什么?叫file item?
10:04
明白我意思吧,但是你要清楚啊,这个fire item有没有可能是普通的放元素?这个发item有没有可能是普通的放元素,它不是个文件。有可能啊,就像我们这个程序是一样的,你看这是个be item,它就不是个文件了,它是个普通的元素吧,所以这边呢,你要注意啊,看底层怎么写吧,啊怎么写来看一看你现在呢,有一个核心对象,而你这个核心对象呢,它需要再去调用一个方法叫side max size max什么意思?比如说这个啊是设置啊,可以接收的最大文件。而这个是怎么设置服务器一次可以接收的最大数据量,这是设置可以接收的最大文件,它俩不一样啊,这个文件的设置怎么设置呢?这边比如说是1024是1KB吧。
11:05
乘以多少?1024是多少啊?烟B吧,B呢?乘以多少?1024是多少?1GB呗,这是最大是1GB的文件啊,可以传,可以上传。接下来你的file upload,你想一想,所有数据是不是都在这个对象里边?我说这个文件上传,到时候你就不行,就复制粘贴得了啊。现在呢,这个我简单把它讲一讲,第一步是创建文件条目工厂,第二步设置一次可以接收数据量,然后第三个设置临时存储目录,再往下就是创建核心对象,设置最大的可以接受的文件。接下来在下面的file up呢,这个可以调用一个方法,这个方法叫pass,表示解析request,你可以将request对象传进来,此时这个方法它会返回。由异常处理一下去啊,这边呢,这个方法它会返回什么list。
12:02
看见了吧,它会返回一个例子,你知道这个例子里面存的是什么吗?我们可以点一下看一下源码吧,这个源码怎么列进去找他吧,找那个叫什么,那个在哪呢?在这个下边啊错了,在这个下边吧,Upload这是源码吧,打开OK练过来了,那你看一看这个方法解析,解析完之后呢,它会返回一个什么list,而这个list的集合中存储的元素什么类型。Fire item其实呢,还是那句话啊,他把什么,他把这个看成一个什么。Fire item,他又把下面这个看成什么fire item,然后呢,他再把他把这个item看成那个对象,他把这个fire item看成那个对象,他把这两个对象放到哪个集合里边了,放到了list的集合中啊就在这。这是解析request啊,核心对象解析请求对象,将请求对象。
13:07
分割啊,或者是封装,封装成一个一个的什么file item对象,对吧,然后将其存储到什么list集合中,然后啊,所以这边呢,它返回的list叫fire a,叫fire a。那我们你接下来是不是电力集合呀,电力集合每次电力拿出一个什么对象,File item对象吧,那你这个fire item对象有没有可能是个普通的元素啊。有可能是吧,所以这个时候你要判断一下啊,所以负循环怎学fair ato ato fair a嘛,是吧?好,那么请问这个时候是不是循环每循环一次拿出一个fire item,而这个fair item有可能是。
14:11
普通元素也有可能是个文件吧,所以现在我们就往下了啊,看清楚了,File item里边有个方法,这个方法叫什么。Fire it.is compaled。这个说明什么,说明该元素啊,该表单元素是一个普通的什么。元素吧,是个普通元素啊,是个普通的表单元素吧,啊,那么这个呢,如果else呢。是不是说明该表单元素?是一个文件吧,是一个文件啊,是一个文件,所以这个时候如果是个普通元素的话,你想想这个file item是不是可以调用下面的方法,你看这里边方法应该叫get吧。
15:01
在的,嗯。有个get name,有个get fired name。先试试它啊,看它能不能拿出来叫file叫name得了啊,直接输出这个name试试吧,来这边呢,咱们打开清空停掉后,呃,咱们这边呢。来这边点中它啊,点中打开来走看底层。拿到的是这个东西吗?是吧,啊,是它啊,那么接下来咱们继续再往下看,你看如果它是个普通的造元素,咱们就调get fired name可以拿到。你看就知道这是个farm fire。Fair name,你有了name能拿value吗?Value怎么拿?猜一下吧,点什么?
16:09
改成。Get name,肯定不是的。那只有盖顿了吗?是吧,只有这个了吧。试试啊,这个时候呢,我加一个什么逗号或者等号吧,再加一个什么value试试啊,看行不行,这边呢,我后退了啊,我刷新刷新之后呢,这边我写上去AAA,然后点上点上打开走看底层。可以拿到吧,可以拿到,那这个你觉得还能拿吗?什么request,什么get,什么parater,拿什么your name,这样是不是我们最原始的拿法啊,是不是这么拿的,然后把这个name输出啊,把这个name输出来,右边name我们看一看这输出什么。
17:03
来清空这边呢,这边我后退一下,来这边我写上点它走打开走好看底层啊。是不是拿不到了,哎,你不要感到奇怪啊,为什么呀,因为现在的什么变了。我们发数据的时候,我们用这个工具监测了吧,我们用这个工具监测的时候,你发现它发出的数据格式跟原件的格式是不是不一样了,所以这边呢,你要注意个事儿啊,文件上传这种方式已经拿不到数据了,无法获取到任何表单元素的数据啊,这个不行了,明白吧,这不行了啊,为什么?原因很简单,因为com表单的enc type。不再是缺省值了,变成了什么?变成了叫INC type,等于什么multi part,叫什么summer date吧这个。
18:14
行了,这边我再试一下啊,看能不能你会不会出现乱码啊,哎,这边我写上什么张三行了先张三啊,走走走走看你的。是不是出现乱码了,嗯,出现乱码了来怎么解决呀。来加上request点下什么,还听见吗?GB18030吧,好,再来看一看行还是不行,加上断点啊。清掉,来,后退,写上点,打开,走底层走到这句话,而这句话是设置字符编码方式,往下走,往下走,往下走走走走走或者结束吧,你看不行。
19:01
是不是不管用了,哎,不行了啊,所以呢,这是惹的事不少啊,那个是吧,所以这个东西不行了啊,无法再解决请求体中的乱码问题啊,无法再解决请求体中的乱码问题了啊,这个没法解决了,还是那句话。都是他惹的祸。这个。明白吧,怎么办呢?你看啊,很有意思的一个方法,这个方法也叫盖顿。你打开看一看就知道了,点get词,嗯。有一个代餐的。那个参数呢,你可写的很清楚,叫什么encoding是吧,接下来这个你再试试吧,啊清掉吧,这边咱们后退一下子来再点上再点上,点上之后呢,直接提交啊看底层没事的。
20:03
所以要想解决也能解决,这么解决就行了。能理解吧,好了,那这样的话大家看一看普通元素是不是就获取到了,接下来呢,如果这个条件成立,这说明是个文件对吗?如果是个文件就上传吧,怎么上传?如果是个文件就上传。File item,它是个文件点right。这需要一个文件吧,New,一个file对吧,后面写个pass行了。这个路径怎么写?最终你要把这个文件放到哪?放到服务器上,所以我决定把文件放到这个位置上,行吗?这个路径怎么获取啊?啊,This点用过了吧,点get third什么contest吧,点get什么real past吧,这个杠吧是他的,记住啊,这个路径里边再加一个什么啊,加上杠之后呢,加上什么文件名。
21:13
是吧,或者你要是不知道,你就把这个pass先输出看一下来输出pass啊。看这个帕子来清空,这边咱们后退刷新点中这个写上走点中它打开提交看底层。带杠吗,这个。这个不带杠吧,所以说大家理解不理解,往后加个杠,我要是再加个杠的话,你想一想再往后加文件名吧。这个文件名怎么获取是不是很重要啊,所以这个时候你看一看是不是有一个file name,怎么拿这个file item,这个file item它能不能拿到文件的名字,它有一个方法叫get name,嗯,正好念到咱们拿一下文件名。
22:15
行吧,来下这个文件名啊,来这样的话,咱们再来看一下,这边呢,咱们写上去点它打开走看底层来。文件名能不能拿到?可以吧,所以这个删掉了啊,文件名拿到了,这个路径就有了吧,加上什么就行了,是他吗?这是不是完整路径啊,拿到路径是不是就开始写就行了,写就可以了,最后你用file把这个路径pass传进去写就可以了。形这就可以了啊,接下来咱们看一看能不能完成文件上传,来点点它部署。点它啊,点它点它重新部署,OK,把服务器启动一下。启动之后呢,这个关闭咱们重新再来啊。
23:03
点开它,然后这边呢,我们就写上去这个啊。这个啊,写上去,写上李四啊,走这边的,这边的这个没有用啊,先点提交吧,提交的话我先确认一下啊。这个里边是不是没有东西。没有东西啊,没有东西,其实我们应该看谁啊,应该看这啊C盘阿帕奇tomcat看谁啊,外边APP吧,看哪个文件上传是哪个。这个吧,啊哪个这个里边吧,你看有临时文件,因为我们刚才是不是一直在上传这有临时文件了啊,但是这个里面有吗?没有吧,我们看这个能不能完成文件上传来走提交。来打开。没事。你只要不是乱码就没有问题。明白吧,这个大小呢,是一个看看啊,看看字节往这看啊,760结尾。
24:03
来我们这边点右键啊,看一看,它是一个700是吧,没问题,正好临时目录的话,你不用管,为什么呀,因为你现在的最终的文件是这个文件,跟临时文件没有关系了啊。这就是文件上传,最简单的一个文件上传了。第一步干什么?创建工厂,第二步设置它的一个一次可以接受数据量吗?第三步是临时临时路径吗?再往下的话,是不是创建核心对象了,你只要这个核心对象调pass这个方法是不是解析request呀,是不是拿出list子的集合,集合里边是fair item吧,拿到之后循环啊,拿出个fair item,接下来判断它是个普通元素的话,这么做,要不是个普通元素的话,咱们就得这么做。那写嘛就行了。能理解吧?嗯,这就是一个完整的文件上传的例子啊,放到那这个里边有吗?刷新一下有没有啊。
25:01
没有啊,这里面不可能有。这是在哪呢?是在D盘下边的啊。程序运行在哪个盘呢?C盘啊,所以你不要问老师是不是上传成功了,这个里边没东西啊,没在这啊。是在C盘的,他的服务器里边呢。这是工作区。你在地盘工作区呢,你有没有点这个,有没有把这个项目部署到另外一个位置。没事吧?你别整半天,这里边儿没东西啊,没在这儿啊,不应该在这儿,嗯。行了,这个的话,咱们就从这儿给它删了啊,这样吧,咱们看啊。嗯。
26:02
我就不讲了啊,布置个作业吧。把这个做一下啊。不再往上讲了,兄弟啊,时间不够。再说可能今天讲的有点多是吗。这个啊,确定过去大家看一看,这里边是不是有这个文件上传的元素,是不是也有这种普通元素。我将来点完确定之后,你不但要把这个文件给我保存到硬盘上,上传成功,而且还得把这些东西插到数据库里边。听明白了吗?你文件上传的时候,是不是既做文件上传,又又连数据库插入数据啊,你执行不0013L语句啊,你得执行啊。是吧,你别忘了还得执行Excel语句啊,而且有没有这种情况存在,云cel语句执行失败了,但是文件上传成功了。所以说你还得控制一下啊,如果insert失败的话,将上传成功的文件再次删除。
27:07
听明白我的意思了吗?文件上传,一般不把这个文件保到数据库里边啊,一般会把这个文件保存到服务器硬盘上,呃,在底层那个数据库表里边一般存一个文件的名字。在数据库表里边一般不存那个文件,一般都是存的那个文件名,这个文件是存在哪的。哎,存在这个这个这个这个这个他盖的服务器里边的啊,一般是存在你这个项目本身里边的,比如你的项目是root吧,你在这建个文件夹,这个文件夹是专门放核准件的。将来一上传你的那个文件就到那了。就到这个文件夹里边了。能理解吧,啊这意思,但是你你别忘了啊,你是不是应该在数据库里边把那个验字文件的文件名啊,你把那个文件名保存到数据库里边,你看你看哪就行了,你看D盘的数据库怎么设计的啊来走进去D盘,进去之后看cost,看071,看database,然后打开,打开之后看这里面有个核准键,核准键其中有一个东西叫file name。
28:21
是吧,它需要保存一个文件的名字,所以我觉得啊,今天的话你就把所有的插件啊搞一搞啊,就是什么f char呀,什么非free chart呀,是吧,然后再把下午刚刚讲的这个文件上传组件呢搞一搞,接下来呢,如果你有时间的话,你把这个功能做一下,这样我明天再写的话,我就不用再费那个劲儿讲什么东西了啊,直接写了点确定。是吧,我就直接放到数据库里边了。啊,我算一下啊,有一个需要文件上传,还需要执行一条insert的语句,将数据插入到底层数据库表中,如果其中任何一户出现问题。比如说你文件上传成功了,文件已经到了什么里边了,他们的服务器里边了。
29:06
明白吧,但是你音色一句执行失败了。你需要将你刚刚上传的文件删掉。啊,咱们给它放到一个事物里边是吧,嗯。一个是我。同时成功或者同时失败吗?行了,今天就不再往上讲了啊,这个时间还算比较充裕吧啊,所以你就抓紧时间的啊,把这个东西写一下。写一下吧啊。下载一下啊。
我来说两句