00:00
那我们现在我们就来看这个,嗯,校验扩展名,那怎么校验呢。还的是阿这个好吧,那我们这个就是什么校验扩展名是否合法。好啦,扩展名在哪呢?写过一个啊,先停掉吧,在这儿吧,这个CTRLX。然后你得怎么的,我得对一个病进行便利。要uplo?
01:04
嗯,然后要一个一个判断在不在这个范围内,你如果有一个不在的话就不行。Sts。有这个exts。是个什么东西啊?看一眼这个字符串吧,嗯,字个字符串,那我们要求要么是PPTX,要么是do X,要么是do,是这样这样写吧,这怎么办呢?这怎么验证啊?好到一个例子吧,真的。等于green.ss.speak啊看的方式简单,然后直接ext listr contains在不在这个里边,哪个里边,那我还需要把这个扩展名获取一下student at name等于定点at name,这个不行吧,等于定点get name,那我需要获取那个点以后的吧,是吧。
02:37
Name点点以后的subs string以后的name.index点然后加一吧,点以后的嘛。行,这就是ext,如果不包含的话,那我就直接。
03:05
Out,有异常。直接抛一个异常出去,可以你也可以都验证,你也可以验证一个就不行,我们选择验证一个就不行,其他就不上传了啊,作为一个,作为整个要么都成功,要么都失败,这样的一个效果,那于是呢,我们来写一个异常类。Exception。In y里的EST nameion exception,一般我们都译成谁呀?Time exception吗?然后。嗯,对应的构造系描写。
04:08
G。六写完好了再回来。有一个不行的话,直接抛一长肉六。好吧,什么什么哪个文件的扩展名不合法。哪个文件。
05:01
说嗯,这个文件的扩展名不合法吧,这样一抛,这样一抛的话,异常会抛给谁呀。往上走吧,看会抛给这部分吧,于是判断一下如果,哎,如果发生这个异常的话,我们就直接到页面上去得了。好了,发生这个异常的话呢,写成形成一个对pass等于二,如果成功的话。Pass等于就是没有任何问题,今天往上写哈,有任何问题,这个pass等于。APP下面的DSP如果要失败的话,Pass等于。
06:03
APP下边的error。P。好吧,那我这样写完之后的话,我那个信息怎么显示啊,信息这么显示request点一点。然后request.request request.forward request。了吧,看懂吧,怎么走的看一下,我应该是在写这一行代码的时候会。有可能会抛出一个异常,异常被cash抓住,然后确定去这个页面,同时把那个异常信息放request里边,那我这异常是不是异常不是就可以获取了呀。
07:03
哦,Upload回以前的页面,Load于是过来。来显示这个错误的消息,在这写就可以了。Message。好,看一下效果。刷新浏览。嗯。TT,肯定不行哈,下一个。这是可以的提交。好了,这个扩展名是不是不合法呀?哎,这就O了,就这么来了,这是校验扩展名,好,回过来我们再说一下这个流程是怎么走的,前边都已经过了校验扩展名,我这个方法这个时候在这块会抛出一个异常,要抛给谁了?
08:16
就被这个cat抓住了呀,那于是诶,我把这个信息放request里边,我去这个页面,页面上不就可以显示了,不就完了。好了,下一个还有一个呀,叫啥呢?叫文件大小,要是超了的话怎么办。这个麻烦一点。为什么这么说呢?这个教案扩展名这个逻辑是不是我们自个儿定义的呀,但是文件大小超了的话呢,这个是人家。分upload主件里边写的,我们得去走源码,弄不好还需要改源码。
09:03
弄不好需要改变吗?我们看看哈,先走起来吧,一兆吗?我搞一个两兆的。大家看说这个few的FAIR1,就告诉FAIR1超过了这个大小啊,然后这么多,很明显这个信息我们不能够满意吧,但这个效果是有了,我们需要把这个给他改一下,告诉说,哎,怎么办。那这个怎么走啊,这个时候我们需要去走这个源码,大家说这个源码应该怎么走,大家以前看过那个源代码吗?我们学解块的时候学不是学那个DP求的时候应该看过那个源码吧,DB9或许会看过那个源码哈,它里边写那个DAO底层那些这个实现跟我们那个实现差不多,都都是用的反射嘛,哎,这个里边原码怎么看呢?
10:18
其后边我们在做开发的时候呢,我们还是会,嗯,看到这样的一个异常,因为我们后边我们学习stra to,学习spring mvc,他们都是用的这个comments fair upload来做的这个什么呀,来做的这个实线,那时候文件抄的话,它也会抛出类似的异常,而且信息都一样,但是框架的话呢,帮我们更好的封装的那个信息,那咱看这个代码怎么找啊。嗯。你会怎么想啊,是不是从这块往回翻呢?啊,于是我们找找哈,有一个叫fell upload base的。
11:07
362行,首先survey file upload的126行,我们点这个362行,那为什么点它呀,那实际上要最先点的应该是谁呀?我们我们从头开始看吧,最先点的应该是他746行,好了,这原码我们可以找到哈。好,这个746行写完之后的话呢,这个一定是嗯,上边某一个方法调用的,于是我们看。大家看它是什么呀,这是不是就是异常信息呀,好了,那这个异常信息的话呢,我们拿过来,我们倒是可以给他进行,呃,用我们的写法给他写成国际化的方式,这都是没啥问题是吧?但是这里边能获取到那个文件名吗?我需要文件名啊,我说哪个文件的扩展名不合法,是这样吗?
12:06
好了,你看这里边啊,貌似都是跟异常相关的,而且这个代码的话呢,那你看到这块的话是什么啊,是不是一个。私有的内部类呀,嗯,File瑞,然后有一个私有的内部类。啊,不过这里边有name,好了往下翻。这块的话呢,我们看的应该是他,呃,抛了一个异常,我们只要把这个改一下就可以,那于是呢,我们也不需要往后看了,是吧,到这块的话,我们应该就可以改。怎么改呢?我们实际上想的就是只改这一行代码,就这块儿需要改一下,别的地方我可以先不改,我们后边还要需要学习国际化,我们应该把这个代码改成具有国际化的方案,那现在拿过来看吧,说我要把这个去改一下。
13:15
看看它这块抛的这个啊是什么呢?叫field fair1超出了这个大小,好了,回来想怎么整改源码的话呢,能改。直接这块改我们需要的就可以了,然后我们想我们一定要去改源码吗?不改源码,我们自己通过编码的方式能搞到这个错误消息吗?懂我这个意思吗?为什么这么说呢?我们为什么要说我们是不是需要来搞这个源码呢?因为你把这个源码改了呀,那你比方说我这块抛的这个信息一定是个什么信息啊,一定是一个中文信息,那要是英文的话怎么办?
14:14
当然我们后边可能会学习国际化,用国际化的方式也是可以的,所以说那大家可能都挺好奇的是吧,语法怎么改啊,同学说老师把这个一删,那我删一下删不了,它是只读的,大家懂吧,怎么改呀,怎么感觉买呀,我们可以通过这样的方式去那个包里边改也行是吧,我们可以在本地建这样的一个包。在在本地建这样的一个类。
15:00
这是我们后边经常用的方式哈。什么?哦,你看这个lo就是我本地的了是吧,出错了吗?然后的话呢,把这个整个的ctrl ctrl a ctrl c。不是这个。说A稍微复制过来说没了好了,然后我们找到那一行叫700多少行来着。这个还是他的746我们的。就我们自己的了哈,看啊,746好了,不抛了个异常吗?这异常信息抛了一个什么呀,File size limit exception,那我的简单了。
16:00
还没定义过这个,那我们就直接报一个我们的一个异常。把这异常往外一抛。不过我们得看一眼哈,我们得看一眼。他这块抛的这个异常是谁呢?是file upload base的一个刀符,什么意思啊,内部类吧,是吧,内部类的一个信息啊,内部类的信息是它大家看the field什么超出了这个,然后set off,这是一个值,这是一个值哦,整个是一个字符串,它是什么P。跟P这个这个对我们来说影响也不大,说那我们就写吧,哪个字段,呃,超出了一兆就可以来。我写一个哈说。我们不是有个内吗,有。过来看看。
17:01
多了,这里面不是有一个name,这应该是文件的名字啊,File item file name OK。名字。备用啊这个文件。大小。包括。行了好了,我们看看效果好好不好用,找一个。是不是好使啊,这个文件大小超过一兆,这就行了,就这么改,同学可能后续会问是吧,说老师老师你这么改是不是有点这个太主观了是吧,是不是有点山寨啊是吧?你直接把这个干成中文的,那英文的怎么办呢?啊,后边我们可以进行国际化,我们有很多种方式哈,这个是一个比较快的方式,那你也可以,你也可以在哪个里边,在我们这个里边。
18:28
那个upload呢,Fail fail啊在这个里边,我根据这个异常的情况来,比方说我出什么异常了,然后of去定位也可以好了,我们这个的话呢,是一种比较快捷的方式,我们暂时呢就用这个方式了。行了,到这块的话呢,我们整个这个应用基本上这个验证部分就写完了是吧,还有什么部分呢?还有一个保存的部分,我们看再往上走好了,还有一个保存这个这部分是不就容易了。
19:07
写一个方法来写个。Take out save begins。这个保存的话呢,我们需要。车口需要JDBC这部分代码呢,我直接复制了啊,因为这部分我们以前是学过的。直接来搞什么东西啊,搞daionlo。你说C直接复制过。写上一个。AB部分。需要什么呀?找包是吧?加什么包啊,嗯,对加DB他是什么呀?C3P0数据源。
20:16
哦,这个方法的名的话呢,需要改一下,其他的问题不大好了,那下边的话呢,我给他来。找个包我直接复制了哈。第三批零九。TSTL买circle这个。直接复制。保存。好,再过来看,这就是一个有问题了,这个时候的话呢。
21:00
过来把这个改一下。The fairload b。是不就完了,就是点色into查的时候呢,跟这个效果一样,行吧,看效果吧,找一个close other来APP下边的upload点点P。OK,首先进行文件上传,看看能不能传上来,这三个删掉。没有。
22:02
回来找一个11,哎哟,还有一个问题,中文乱码的问题,貌似没写过,先看哈,来,我们写个中文。监听器。国际化。好,写两个一交。扩展名不合法就PPTX吗?都PPTX吗?咋回事啊,上来没进来哈,那说明我们的这个代码的话呢,有点问题,我点一下它看一下。
23:09
验证这块儿来。一个吧。Ext同时呢,这里边我在一个ext name不就这两个是不对呗,保存。有可能我们处理这块的时候加一减一呀,对会退。刷新就可以了,看看。不对呀,这应该是什么呀?Ext name没改吧?他是谁呀?这个家伙是不是没有把这个取出来呀?第一个是对的哈,Fair name subs fair name index of点。
24:10
下一这个点会有什么特点吗?找到index of a。Any dream last index of是吧,Out。Tlc稍微找一个。
25:01
因为出现。坏哦。为什么是二啊?这里边也没有别的了是吧,你要啊后边的后边的可能会有这个时候的话呢,打印我们看打印都没出来看看哈。我打了一个ext name。这块这个值是二。抛了一个异常不包含,这为啥是二啊,起码应该是是这个是吧,11点对11点那个是11点那个是他这块应该打那个。
26:05
你该打那个呀,是吧,那last last in。这么写倒没没啥问题是吧,因为我11点,我是不是有个11点啥啥啥呀,这块肯定是应该这么写啊搞一遍。成功了是吧,我是不是没写这个size啊,就那个问题找一个。但这个没有传上来。22PPTX这这OK哈,找了C5啊,我是不是没有调那个方法呢,这这个疏忽了哈,这文件的话呢,已经传成功了,看看来进来。CTRLC。
27:04
这个不好吧,这也是我们后边那个问题是吧,这个重新找一下。就是扩展名的问题,你看这个时候我们代码要是写到这块的话,你会怎么想啊,你会想我把获取扩展名这个可以考虑写成一个方法吧,因为后边也用到它了,我们看C说C获取名字的时候。在这块吗,过来。应该这么写。行了。这是一处,然后的话呢,保存这个创建一个微微的叫什么什么DAO。嗯,Upload。
28:02
FDAO。OK,调一下方法。再看。刷新走。没进来。这块的话呢,显示这个C3P0已经走了。顶过来看看这个方法。Ins色into有一场我打印了。
29:01
Update。才出异常,这异常出有点慢,应该是什么呀?是字段的问题吗?他说cos by。Primary factory of source。应该数据源获取的没有成功,File name fair pass d。它是什么呀?File name file pass,往这看对数没问题啊,获取数据源获取的不对。再回到我的这个里边来哦,Java web,我是不是没有拷那个配置文件啊是吧,C3P0的配置文件没拷copy。
30:05
坏了点没加上,大家看了吗?这停掉吧,点得加上啊加点。下面找一个方法,你看这个时候的话呢,我们这个方法写的,因为我是复制的嘛,加不加一了是吧,这种。回退。监听器。新增。国际化。好了,再看。是不是进来了,往后翻看是不是有乱码呀,但这块这个是OK的哈,这个时候呢,在对应的路径下啊,也有文件这两个回答过来,那这两个OK了,行了。
31:15
嗯,这个乱码怎么解决呀。吗?你会怎么想?什么?Request set coding是吧,来。request.setding有点F杠发。啊,这是一处是一处,比如还有一个地方的话呢,我们还可以再写一下,我们看构建这个集合的时候,我们找一个啊。这块这个值找一个,你看再个是不是也可以传一个enco啊OTF方法。
32:02
异常好好春行了再看。这俩不要了哈。直接刷新。是不是OK啊OK好了,看路径啊也有行了,整个这样的话呢,我们这个就写完了,这就是整个这个流程,你先给大家,先给大家把这个代码先发下去,大家看一下,一会儿的话呢,我们来做一个小结,下课先休息一会吧,这块这个问题的话呢,是我们有写了一个四个赛JP吧,是吧,这个我们回头我们再写,因为还有一个下载呢。加上吧,你加上。
33:01
文件上传成功。对吧,我们把上节课这个对应的这个功能的实现的话呢,做一个小结看一下,首先呢,那小节的是我们上节课都写什么了。我们过来看,有一个扩展名的校验吧,嗯,写了一个方法,然后呢,每一个文件不能超过一兆,这个是呃,Comments file upload的内置的吧,但是我们改了一个错误信息是吧?哎,这里边有一个点需要我们总结,就是如何去修改工具或者是框架的源代码,整个不能超过五兆啊,这个还没写呢,这个实现方式跟我们改这个方式是一样的。
34:07
行了,这些都OK了,然后数据库这块的话呢,我直接把以前的DAO啊,什么这个DB exception啊,Jdb u啊直接拿过来,大家直接看就可以了,这部分的话呢,属于JDBT的范畴,大家嗯自己看就可以了,这我们不说了啊,OK,我们来说一下这个事三哎,如何。修改小工具或。放假的源代码。首先的话呢,我们要说一个原则啊。能不修改就不修改。能不?修改就不修改。
35:01
为什么呀,因为你在这个时刻的话,你可能是这个逻辑,下一个时刻可能就是下一个逻辑了,是吧,所以说你不能来修改这个东西,你就像哎同学说,诶,我去这个一个公司,说这个公司啊,来到这个公司之后的话呢,这个公司得得为了这个某一个员工去修改这个公司的一个规定,说这个员工特特别牛是吧,这个公司就是说早上十点上班行了,赶成改成十点上班了,早上十点晚上七点。过一天又来一个很牛的这个哥们说11点上班对吧,还需要再改一下,所以说这个时候怎么能不改,尽可能不改,你可以让这个人,呃,有一点有一点特殊还是怎么样的话,都可以说能不改就不改,但是我们刚才那个的话呢,我们改了一下,我们是想让大家看如何去改的。刚才那个也可以不改哈,OK,那修改的方法。修改的方法的话呢,有两个直接什么修改原代码,就是修改以前那个代码,然后呢替换。
36:12
价包中对应的class文件,比方说我们这块有一个fair upload base,你去找哈叫呃org阿pag comments fair upload过来看。Fair upload,阿帕奇fair upload这个里边的这个fair upload base。Upload这个是吧,哎,你可以怎么办呢?你可以把这个改完之后,找到对应那个class文件,然后把这个给它替换掉。很明显这个改的成本很高是吧,你还得完成一个物理的替换,一种方式,另外一种方式就是在本地,在本地新建。
37:19
相同。类,然后呢,在这个位置,在这个位中。修改即可,我们可能就是这样的方式,在本地建了这样的一个包,建了这样的一个类,我去改这个时候什么了,他就近查找,那直接就查查找啊,我本地的这个包里边的这个类,于是的话呢,就完成了这个修改,超出好了就是这个,还有一个呢,是我们这个文件的。
38:02
嗯,保存保存,我们看一下这个DAO吧哈,这个DAO的话呢,并并不复杂,直接是一个inser into做了一个for循环,这就可以了,好再回到我们的这个,我们再加一再加一个什么呀,删除。这已经成功了哈。临时文件夹,临时文件就OK了,我们这时候我们就可以写了,这个时候我们找到我们叫fair。自个儿写的哈。Le。All fair。好了。临时文件夹我看一眼哈,我设置了吗?它是吧,你看这个时候这个字符串啊,我可以拿到前面来临时文件夹temp directory。
39:12
Private。等于。等于它本C,我来用它来写。OK,那我删的话呢,我也删他。好了,看一下好不好用。D盘temp。
40:01
好多啊,就放这就可以,一会儿他就会删,找一个这两个暂时先删掉过来。新建一一个新增。国际化啊提交。没问题是没了呀。他删了是吧,我们用那个递位的方法吗?啊,这种方式比他给那个监听器啊好的多,那个监听器它是靠线程去检测,非常耗死源。
41:00
好了,到此的话呢,我们整个文件上传的这个知识和我们这个写的这个小应用就写完了,那如果我们不用框架的话,比方说我们用的就是什么JSPBC,写一个项目,我们就得用原生的comments fair upload用的话呢,基本上就是这样用。OK,这个写完之后的话,那小飞老师那个高端大气上档次,那个上传图片应该是小case吧。小case吧,图片一传,然后怎么了,你是不是也要在数据库里边保存这样的一个路径啊,然后你让这个路径和那个书的那个图片对应上,是不是就可以啊,可以吧,大家把那个的话呢,也完成一下两个任务,第一个任务把我们这个代码先看一下,看一看有没有不懂的。嗯,没问题的话呢,把小飞老师的那个项目写一下,我们昨天讲的时间好长是吧,我们今天把大家练习的时间,思考的时间再还给大家,所以说这个大家可以好好的来看一下。
我来说两句