00:00
好,下边呢,我们再来看一下solid3.0对于文件上传的实现。那我们知道啊,使用so。或者说我们前面使用什么了,在。在讲这个文件上传和下载的时候啊,在这个专题里边,我们说文件上传,为了为了简单一些,我们还专门使用了一个第三方的工具。阿帕奇的。File upload。但旧那写起来这个代码也是很复杂的。很麻烦。三的3.0。提供了专门的API。和专门的注解。用于完成文件上传,使文件上传变得非常的简单了。
01:06
那么我们来看一下啊,它专门提供的API。但是你注意3.0专门提供的API,那我们帮助文档啊,就不能再看它了,这是2.5的,是不是我们要3.0,那就是加Y6的啊。这儿有这个文档。找谁?大家看啊,找他。加va X点点TP,其实我们找的是那个。I request。在它里边有一个方法大家看,叫get part。你看getpad这个方法。3.0对不对,他干嘛的。Get the part with the given name。
02:04
获取你指定名称的part部分。什什么是怕你不要忘记啊,我们那个。Multi帕的请求是什么?是部分请求。那这个帕就是那个帕,只不过在这这个帕他又封装为了一个。一个接口。你看这个part。这个pad里边有一个方法叫right,干嘛呢,看一下。A convenience method,一个方便的方法。To write the upload item to Dis。我把上传的这个像写到硬盘。所以它用起来很方便,这个代码变得很简单了。
03:02
下边我们就来写一下啊,零五,哎,零五了。零五。Fair abroad。3.0。我们这里边儿不需要外表前面,所以直接finish。直接finish。先写页面吧,页面这个。文件上传对于页面的要求还清楚吧,是不是三个要求?第一个。Method必须是post对吧?第二个要添加一个属性叫INC。
04:09
它的值multi part杠,Form data表明当前的这个表单所提交的请求是multi帕的请求,不是普通的请求,对吧。然后这。来个。这这这儿不能是test了是吧,是必须是fair啊。然后name,比如我们这个。还叫photo吧。叫什么无所谓了。哎,错了啊。
05:02
Value。上传好action,写一下page contest.request.content contest。Lo so吧,Serve。OK,表单写完了。表单写完了,紧接着要写这个了。So。这个我们仍然是直接定义。Com点北power no点是吧,然后这个叫upload solid。
06:11
Upload solid。对吧。你看是不是周杰有了?你注意我现在定的这个so是干嘛的,用于处理文件上传的对不对?用于处理文件上传。也就是说,处理mot请求的。这里边儿需要添加一个注解。Multi config。
07:03
表明当前so。可以处理什么multi请求,诶这个不要忘记。OK。来吧。写吧,你上传的文件。给他放到哪儿?我们这儿来一个folder。Images,可以吧?那我要获取到这个路径是不是this.get contest.get real pass images,这获取到的是什么?我就叫pass。
08:01
我要给他存到这儿。这是或许。啊,服服五。端保存。上传文件的目录。路径对吧?好啦,下边就可以来写上传了,怎么写很简单,Request request,第2GET。Part。你看这是不是有个get part对吧?这要放个name,关键这个name放谁呢?就放他。放这个东西,你要上传这个文件的name。
09:00
就这个啊,这个这个表单项的name photo。给他放这儿了,它返回值是个part。这是干嘛的?从请求中获取。上传文件表单。啊。获取怎么写更清楚一些,从请求中获取multipart请求中。的上传文件。部分这个部分就是怕他呀。部分对象。
10:02
有了它了,好办啦,怕点儿,我们刚才不是说了吗,Right。直接写就行了,写到哪pass,当然我们现在没有文件名是吧,文件名这样直接给他个文件名。这个叫我们假设啊,这会儿我们要上传一个文本文件。上传一个文本文件,我这个文件名随便给他起个名叫叉叉叉点。TXT完成了,你注意文件上传就已经完成了。就这就这行了吗?是的。跑一下吧。现在就能跑了啊,这个程序就能跑了。
11:01
走。不就是它吗?只不过我们现在啊,这个文件没有我们新建一个。这叫ABC。啊,写写个什么瑞啊,就写瑞就行了。这样吧,多写几个瑞北京。Power node。好多写几个啊,五个好了,那么我们现在就可以来了。桌面。不是他吗,打开。打开。
12:01
看着这儿,我我把这个。开发者工具让它显示出来啊。上船。完成了没有,先说你发出去了没有。看看参数。发出去了吧,这不是个multi吗?多部分吗?是不是现在就这一部分对不对。这不是内容吗?那再看看。看这。里边有没有啊,我们看一下里边有没有。是不是server Co啊,找server server server。是不是他images有没有。有吧?
13:00
五个。OK啦。你看看现在。我们现在完成文件上传多么的简单。对不对。就是获取部分,然后直接上传搞定了。只不过啊,现在这有有一点不好什么呢,就这个文件名啊,这个文件名我们。想获取这些原始名称,要获取原始名称啊,有点麻烦了。怎么麻烦了?我们要想获取原始名称,它这儿没有专门的。获取名称的方式。我们只能怎么?通过获取这个。POS值。Content disposition的值。
14:01
咱们看一下吧,行不行,咱们看一下它的值是什么再说,那这个值怎么获取,肯定得从帕里边获取啊。是不是是从趴在里边不是。你看从part里边儿我们可以get。Hier。就放他好。这大话看着难受啊。获取指定的。哎。头部属性。啊,点get。
15:01
他叫hide是吧?Heather就heather是个字符串,是不是哪个我现在要它呢啊。我现在要content disposition。Content disposition。Header header,我们看一下这个header它的值是什么,好,重新发布过了。挂了啊。刷新。早。看到没,是不是这个东西啊。还是它,你现在想获取文件名,你是不是就得获取它呀。对不对,你就得获取它,所以我们得想一下,怎么能获取到它呢?
16:06
啊。怎么能获取到他?方法很多啊。第一,我们可以这样,你看这中间是不是都是用分号分割的。我可以用那个split,我给它分割,分割出来,然后再读它把这个东西读出来。是吧?再按等号分割吗?我要后边部分。第二,我也可以直接找谁,File name等号。我找到他以后,我直接读这个东西。不就OK了吗?第二种方式可能稍简单一些啊,不过你觉得数数麻烦一些,我们就用第二种方式啊。对这个字符串进行解析了。啊,进行解析,点index of。
17:08
In death of谁呀,我就找他呢。找他。我找到他的,找到他以后呢,这是什么。In of,这是不是找他的那个那个那个叫什么。索引号啊。是不是?Index。这是这个index,找到这个索引号以后干嘛。或者。或者这样也行。找到这个索引浩以后啊,他其实是这样的,就是从他。
18:01
后边儿。开始的。这个内容一直取到最后,这是什么?这是整个文件名。这整个文件名,呃。或者我们找。最后一个等号。那也一样啊,一样。嗯,我看一下啊,我看一下这个方法。Last,诶对,我就用这个,诶第二。Last index of。Last in death of谁?等号。我就要最后一个等号,它的索引,这这这样就简单了啊,最后一个等号的索引有了这个索引了,那这个文件名是谁,这个索引号是不是加一。
19:06
从这开始往后取。所以。Hier.substre。对吧,从哪开始取,从index。加一开始取,一直取到哪,你注意不能取到最后,因为取到最后是不是还多一个双引号啊。取道head.le。减一,这个能理解,不能取出来,这个就是我们的file name。他就是fair。
20:00
解析出文件原始文件名,那这样的话,这个file name。就可以用到这,就可以用到这儿看看是不是啊跑一下。跑一下看看啊。跑一下的话。刷新。走。Yeah。啊,这个这个这个这个。看看啊。嗯。这样。
21:01
重新启动一下。Imagine,哦,这多了个他,是不是多了个他?那也就是说我们这儿啊,我们这儿index取到这个index。这是他的下标,我们从哪儿开始取呢?实际上这个file,我们现在这值这样吧。我们还先这样写,让大家看着点,这个是最最直观的啊。File name,这是最直观的。
22:02
F。好。Yeah。好,他重新发布过了。走。是不是多一个这东西啊。是不是多了一个他?多了一个它,所以我们这就应该加二。那说明一个问题啊,你注意说明一个什么问题。他这儿有个空格。哪儿?这儿。走。
23:02
说明。嗯,不是。你看看啊,咱们现在看看这个是没问题了,是不是加二是没问题了啊嗯,加二没问题,最后一个index,最后一个等号给它加了二。那还是说明那有个空格。说明那有个读过来那个东西啊,那有个空格好就这了,问题解决了,我们不管那么多了,具体数数这个事儿啊,我们就不管了。好,现在我们就可以。重跑了。删掉。
24:02
走。是不是ABC.t啊,搞定了。其实我们刚才写的这一大堆啊。写的这一堆都是为了解析原始文件名。这都是为了解析原始文件名啊,真正核心的上传就这两句,他和他搞定了,所以我们solid3.0里面对于文件上传的实现啊。就变得简单多了,不需要借助第三方工具了。
我来说两句