00:00
首先呢,那我们找到这个文件,其中把这个解压,呃,这个src是不是源码包啊,看源码的时候就要看它哈,还有一个IO,这个也解压,我们需要用到两个包,找到fair upload。Li第一个是CTRLC到这个里边来,同时呢还需要IO这个包。CTRLC。首先需要加入这样的两个大包。好了,下边。关键的地方出来了是吧,怎么用。怎么用啊,嗯,于是的话呢,我们这个办法只有看文档了是吧,所upload好,在这里边有文档size找到去找哪个文档index打开英文的是吧,应该看看哪一项啊对user again,用户指南,OK,往下翻,OK,这个时候的话呢,这个英文是不是好多呀啊,你可以以一种比较快捷的方式来看,怎么看呢?这样看直接看,直接看代码,然后看这个代码的解释,第一个是什么呢?解析这个request。
01:39
那我首先我可以利用这样的一个静态方法来验证一下它是不是这个,嗯,对,Multi以二进制的方式来传的这个表单信息,这是第一个,第二个看这个代码哈,我们可以得到一个什么呢?我们可以利用这个solid file upload的这个对象得到一个list,这个list是个什么类型呢?是一个fair item类型,记这个例里边放的就是fair item这样的一个一个的元素,好了啊,用这个upload去解析,至于说如何如何写的话呢,这块也有大数进有一个印象,好然后再往后看他看什么呀,得到之后呢,我们可以用,我们可以对得到这个list进行遍历,遍历看哈,我可以来判断。
02:40
它是一个form field,它是一个表单域,还是一个文件上传的一个域,表单域还是一个文件域,再看如果是表单域的话,获取名字和值,如果是,如果不是表单域的话,我可以来获取内容类型,获取大小,乃至于获取输入流,进行文件的上传操作,哎,这就是基本的信息全在这儿,OK,有了这些以后的话呢,我们先有一个大致的一个思想。
03:18
Cannot来说,使用它来吧,一个一个写来搭建环境。这个搭建环境啊,超简单,加入两个架包。加入两个夹包,直接烤了啊。两千八就可以了。好了,第二个我们说,哎,基本的思想还是要说一下,基本的思想的话呢,就是说这个bos fair upload呀,可以解析请求。
04:05
I呀,可以解析请求得到一个什么呢?得到一个file item对象组成的list。好了,这是第一个层次。好了,然后说吧,那fell upload。把所有的表单字段,表单请求吧,请求信息都封装为都解析为解析,为什么呀?File item项,就是说你无论是一个一般的文本域还是一个这个呃,文件域都是它。
05:02
无论是一个一般的文本域。还是一个文件雨。都是什么呀?都是解析成一个fair item对象好了,下一个那可以调用file item的一个方法来判断它是一个文本域还是一个文件域,这个方法过来看叫啥嘞,叫什么意思。这个啊,这呢,它is form field是一个表单语还是一个文件语。款。
06:01
可以调用这个方法来判断是一个表单语。还是还不或不是表单语。他这么写的哈,那不是表单,就意味着它是一个文件语,则是一个文件语。这一个文件的一个字段好了。然后呢,再来获取。再来进一步获取信息,获取信息这个呀,我们刚才大致上已经看到了,这个获取信息无非就是这样获取,如果要是一个表单域的话,可以这么搞。你说C原字段的话搞什么呀,可以搞名字好,否则我要是一个文件域的话,可以这么搞。
07:09
在这儿呢,这两个吧,一起吧,你说C拿过来。好了,这是一块,我们接着写。还有啥呀,还有这。行了,又是基本思想,基本思想就是我们这个,呃,Commons file upload,把请求解析为一个file item对象组成的list,而这个file item呢,就是那个请求信息,一个请求信息可能是一个文本域,也可能是一个文件域,我可以来判断。
08:01
如果是一个一般的一个文本的话,那我获取这个呃,名字和值,如果是个文件的话,我可以搞到比方说content type啊,这个这个这个包括大小啊,应该也会有方法啊,输入流啊,有输入流的话我就可以了,好了,这就是呃基本思想三。那具体如何得到,如何进行解析啊,如何得到这个list for item,就像G摸到这个集合呀,这里边的话呢,也有详细的写法,我们过来看来。啊,简单的写法是这样的,复杂的写法是这样,我们先看简单的这就可以了。比如说C不能,这就可以解析,找到了简单的实现方式。
09:08
哎,简单的方式,那个方式怎么了,就这样是吧,先搞到一个fair item factory,它是干啥用的呀?File item的工厂,然后呢,得到了s file upload啊new一个把这个传进去,然后一解析就可以了,用这个upload进行解析好了,还有一个对应的一个复杂的方式。复杂的方式是什么意思啊?可以被文件的上传加入一些限制。嗯,了解和这个其他的属性,比方说我这个文件要是很大的话,我不能都在内存里边啊,到一定程度的话,我可以把这个文件先写到硬盘上,再比方说我传文件的话,我这最多传一个G的,两个G头不要,哎,我可以来进行这样的一些控制,那我们看吗,在哪呢,再拿过来在这呢。
10:22
CTRLC过来。大家说这个是啥呀?无非就是这一步和这一步,看到这块的话,我们可以怎么,我们可以怎么样啊,一方面你可以看这个方法名,另外一方面的话,它是不是有API文档啊,看文档就可以好了,那我们把这个我们看一下这个文档啊,就说设置factory的这个约束,那看看吧,啥意思啊,找到API往上翻。有API吧?
11:01
找到index。OK。回来。看这个啊,叫factory,这个factory是Dis file item factory,于是找,呃,Dis file item factory,找方法,有一个方法叫它叫set sizehold什么呢?嗯。设置一个大小,然后如果要超出这个大小的话呢,我就把这个文件写到了磁盘上,是这个意思吧。就是说我这个文件要是很大的话呀,我不会始终都放在那个内存里边,到一定程度的话,我就把那个文件的信息写到硬盘上,我们一往上再读,这样的话呢,可以节省这个内存空间,在高在高并发的时候,不致使这个服务器的负担过重啊,这个单位是啥呀。
12:00
字节BAOK,还有一个叫POS,它是干啥用的呀,设置一个临时的文件夹,如果超过这个大小的话,就把这个文件写到这个临时的文件夹里面,看到了吧,File类型,于是两个可以写了,哎,第一个一个设置。嗯。一存中最多。可以存放。的上传文件的大小。说大小超出。或超出,则把这个文件写到一个临时文件夹中。
13:04
好吧,以以艾为单位,At为单位,好了,这个就是设置那个临时文件夹。好了,还有一个叫set size max,一看能看出了吧,是指整个上传的那个文件的大小,那我们也看一下哈,File upload过来。S大头的这个实际上,哎哟没有啊。在哪呢?是不是在这个负类里边啊,点它啊这个方法。设置什么呢?设置总的文件的,哦,不是这个。点错了,叫set fair size max好了,点到这个话也行是吧,设置单个文件的大小,刚才那个叫啥呀,叫set。
14:13
Size ma,这是设置总的大小,就是说我一方面可以设置,比方说我传五个文件,这五个文件加一起不能超过十兆,单个文件不能超过三兆,可以吧,单个不能超过三兆,总的不能超过十兆,这不矛盾吧?就是有的,可能你就就你这个是三兆,那就是一兆呗,不就可以了吗?OK,那我来说一下,这个是设置这个上唇。文件的总的大小,然后的话呢,我们说说啊,也可以设置单个文件的,好了再调其他方法,其他方法的话呢,你过来看这个API就可以了,好了,到这块啊,我们基本上是搞清楚,于是我来写一个hello word看一看这个文件上传的基本效果,过来吧,把这个往下拿了啊。
15:31
好,说一个步骤吧,第一个,首先我先需要得到第item下,实际上怎么说好啊,得到file item的集合更好一些。好。第二步建立。It。
16:06
所以他干什么呢的若是一的一般的表单与打印。信息。啊,落实文件域,则把文件保存到,比方说我这个这个这个D盘登录像有一个file录像。哎,这是我的基本逻辑,就是这个逻辑,下面的话呢,我们得吧,第一个这个怎么写,我要是不看文档的话呢,我确实是记不住,但是这个文档啊,并不是从网上查来的,这是是官方带的呀,所以说从这里边复制不丢人哈,很正常,我把这个复制过来来OK。
17:06
Trl shift o小就可以了哈,行了,那这块的话呢,需要设置这个呃,文件大小,我们说哎,动不了了,等一下未响应啊。这个是1024,这是1K吧,乘以500,超过500K的话呢,我就把这个文件写到我这个临时的一个目录里边好了,一个临时目录temp directory。写一个吧,Fell等于六。A director。比方说这个对的是D盘,我说ta director,那我前提就是我得先创建这样的一个临时目录,D盘的根目录。
18:16
一会儿的话呢,我们可以看这个里边是不是会有一个临时文件发生,好这个呢,设置种的大小的大小,比方说种的大小不能超过,呃这个这个呃五兆1024。是。K1兆五。好了,到这一个集合应该是有异常。他为什么不让我这个抛出啊,为什么只能让我这个踹开呢?为什么呀,我这个方法是不是继承的呀,不能够抛出比这个范围更大的异常吧,他这个异常啊,超出那个异常了,所以说你只能再看行吧,有异常打印吧,没啥啊,再一个便利。
19:22
For循环I点哦。It OK,如果。那这样不名加泛型啊fair,哎,好,如果是一个表单域的话,If基本信息item点意思form field OK,有两个,一个是获取一个名字,等于item.at大家看有两个名字哈。
20:10
Few name,还有一个name。哪个是猜是不行的是吧,两个办法,一个是试一下,那么试一下是最宝靠的吧,你看这个就知道了吧,还有一个是什么呀,看文档,文档里面写了过来看看吧,来fair item,来我们找到get name方法,大家看这get name,哦,Get name,这是返回了这个原始的文件的这个名字,Get few name呢,这是返回了表单里边的那个名吧,所以说我们应该获取的是这个叫few name来。
21:04
String value等于A减A。哦,60是怎么搞的?爱死顿吧?第三嗯,加加我我我们也可以看什么呀,可以看那个文档是怎么写的,文档上不是获取过一遍吗。对吧,啊啊get name跟我们写的是一样的啊,这是get name啊,我们也这么写的,好拿到打印了好了,如果要是一个文件域的话,那么我们说把这个文件的信息啊。上去。还到这个目录下。
22:05
那我首先的话呢,来打印一些基本的信息,基本的信息这块也有哈,我们还是挺好奇的,都什么东西啊。C过来。Film name file name content type,呃,是不是在内存里边,嗯,大小,这就应该是大小了哈,过来来,这个就不要了,把这几个打印一下sit。Name。好了,然后呢,我们说把这个文件啊,直到放在直接放在这个目录下得了,Files ctrl c,我来新建一个files。
23:05
想好了来吧,那我需要搞什么呀,我需要搞那个输入流。Put in等于item.get stream下边干什么呢?是不是就是用流去读写了呀?Bench。等于6AT1024N等于零,然后out out等于new outp OK,我有一个文件名。File name OK,有一个file name哈,看诶这个file name是什么?他说这个原始的名字,我们就这么写呗,就是一盘分目录的false。
24:18
OK。Them一下啊,She out them。好,写完,然后按照留的方式来进行写,没有。怎么写?等于先读吧,Read读到八分里边来,如果这个值不等于负一的话,我就开始写out点。Right。BUFFER0到N,然后关掉out.close in点就写完了,看一下效果。
25:17
哦,打他是吧,嗯,看来。看一看。呃,这个文件不能太大,这个可以。OK,我们看。四个信息,第一个是fair,我们看怎么打的哈。啊,这个应该是file,叫field name吗?是吧?这个是那个原始原始的文件名content type不是一个压缩文件嘛,是吧?这是文件大小差不多吧,刚才我们大致上看了一下,这个是我保存之后的那个文件名,这个是什么呢?这是那个DS那个信息吧,诶挺成功的,再看它找到file是不是有了,上传成功,然后呢,还有一个地方,我们比较好奇的就是那个temp好使吗?哦,我们再看是不是有啊呃,临时文件的信息是有的。
26:26
哎,整个这样的话呢,我们这个文件上传的hello word就写完了,也就这么多,呃,基本的要求,然后还可以再试一下,如果文件超出了这个大小的话,怎么办,会退。找一个大一点的,这个肯定大找一个。你看数抛异常了呀,说呃,超出大小了,这个时候的话呢,会有这样的一个异常的信息啊,我们后边后续再做的话呢,我们就可以写,如果超出大小的话,我在页面上我要给你一个信息,告诉你这个文件超出了,对,但是目前作为一个hello word啊这个程序就够了,所以说单纯说这个知识点是不难的。
27:22
嗯,我们通过看这个note,以及我们这个基本的程序,这个commons fair upload基本上就掌握了,当然我们后续的话呢,我们会有更高的追求,比方说哎,我希望我一下子传N多个文件,然后有个别文件超出了大小,我需要给出一个信息,这个文件超出了大小,超了多少啊,扩展名不合法等等等,这个的话呢,我们后边我们再说,但是作为这样的一个基本的文件上传,我们可以搞定,OK,发给大家,大家的话呢,就来练一下。
我来说两句