00:00
好,那我们现在呢,咱们的文件上传功能实现完之后啊,然后大家来看这里面有一个比较特殊的问题,什么问题呢?就比如说你看我们现在呢,咱们上传的这个文件呢,它是这个对吧?然后呢,我现在我再上传一个叫做一点勾PG的文件,比如说eclipse快捷键,咱们来找到这个一点勾PG,然后我们现在来选择上传,大家看成功了,但是呢,我们现在咱们把这个打开之后,诶,大家会发现一个问题怎么了。我之前上传那个文件是不是没有了,对不对,然后我现在是不是看到的是另外一个文件,因为我之前上传那个叫一点勾PG,现在咱们上传这个是不是也叫一点勾PG,对吧?好,那这又是什么情况,因为唐老师这个文件它被覆盖了对不对?大家注意这个说法不太准确。这个其实应该怎么去说呢?它并不是文件被覆盖了,你就比如说我现在我这里面有个勾,一点勾BG,你再往这里面去放一张,一点勾BG,它能放得了不?你看大家注意能放不能可以放啊,这个文件叫一杠,然后副本点勾PG,所以说这是为什么,大家注意啊,并不是我们当前咱们的什么被覆盖了,并不是这个文件被覆盖了,而是文件中的内容被覆盖了。
01:18
对吧,因为咱们说过这个文件上传就是文件的复制,你得先读再写,然后我们读大家都知道怎么读的,但是咱们的写,我们是需要去创建输出流的,对不对?怎么创建输出流,大家有没有还记不记得咱们的输出流你创建的时候里面是有俩参数的呀。是不是比如说咱们在这创建一下叫做output stream OS,等于六一个fair output stream。OK吧,然后这个括号里面其实是有俩参数的,第一个参数是我们当前咱们要上传的文件,咱们要输出的文件的位置。叫做string,怕这个fair,这个fair fair就是我们我们当前咱们所输出的这个文件的位置,OK吧,但是你不要忘了,这里面还有第二个参数叫什么叫不玩openend,什么意思,叫做是否追加,它默认是不追加,然后进行覆盖的,大家有印象没有?
02:18
它默认是不追加,然后覆盖,所以说我们现在为什么咱们当前这个文件呢?对吧,你上传了之后,对吧,这个图片变了,为什么?就是因为我们当前咱们的这个文件呀,对吧,我们的名字是一样的,所以说我们当前咱们在进行复制的时候,我们写我们在进行这个文件的写操作的时候,咱们是不是写到了同一个文件中。对不对,所以这个时候咱们第二次写的时候,就把之前咱们写的那个内容,咱们之前写的这个文件中的内容,就把它给覆盖掉了,知道吧,所以说这不是把文件覆盖掉了,而是把文件中的内容给覆盖掉了,知道吧,这样的啊,那这个时候怎么办?这个时候啊,然后呢,大家想想该怎么办啊,我们之前咱们大家应该都在咱们的百度上去下载过一些,下载过一些图片,那大家有没有发现这些图片的名字呀。
03:10
都没有一样的。对吧,这个名字基本上都是五花八门各种各样,那所以我们现在要想解决这个问题也是一样的,怎么解决啊,咱们只要把这个文件名呢来设置成永远都不重复的一个名字就可以了,比如说然后咱们在Java中永远都不重复的内容,咱们。可以使可以使用这个。叫做时间戳对吧,然后咱们也可以使用这个UUID,大家有没有学习过UUID呢?咱们在这就用这个UUID来实现,来实现一下吧,行吧,好,那我们现在咱们是不是就可以把UUID来作为文件的名字,但是大家记好,你的文件名包含两个部分,一个是名字,一个是后缀,大家说我能改的是什么,你能改,你能把它的后缀给改了吗?不能吧,所以说我们只是然后来保留之前文件的后缀,把它的名字,然后用UUID来进行替换,对不对?所以说我们在这就需要对文件名来进行处理了,怎么来处理,大家看好,比如说咱们先来获取,然后咱们上传的文件的后缀名,OK,然后叫做file name,然后点大家看怎么获取啊。
04:25
截一下不就完事了吗?直接subs string来截一下sub string方法呢有两个重载的方法,一个呢有一个参数,然后还有一个是有两个参数。干什么的,有一个参数是从哪开始截,默认截到结尾处,还有一个就是从哪开始截,截到哪,那大家说我们现在咱们是不是要获取后缀,那你是不是要只要。指定我们当前需要从哪开始截就可以,对不对,那所以咱们应该从哪截啊,应该从点儿开始截啊。对吧,然后我们当前这个subst string,它是包前不包后的,那既然咱们从点开始解,是不是就包括这个点了,对不对,所以说大家看啊,那咱们怎么做,然后要从点的索引位置开始填,那我们是不是现在就需要来获取这个点当前在咱们的文件名中的索引位置,然后叫做file name点叫做index of,然后括号里面来写个点,但是你这样写行吗?不行,为啥大家看啊,然后比如说你看咱们当前这个文件名,你看1.1.1.1.1你看。
05:34
这可不可以,可以啊,而我们当前的index in,那我们当前咱们的这个index of这个方法是来获取什么的,我们当前的这个字符或字符串在在我们当前的这个file name里面,然后第一次出现的索引,对不对,对吧?所以说大家想想咱们能这样去做吗?不能啊,所以说在这这个方法咱们要换一个,但虽然说我们当前的文件名里面,它有可能会出现点,但是大家注意,我们当前这个文件的后缀中一定是不能出现点,一定是不会出现点的。
06:08
对不对,好,所以那我们是不是就可以换一个方法叫什么叫做last index of,然后这里面来写个点就完事了,这就是我们当前文件名中最后一个点出现的,所以然后咱们从这开始写,那咱们当前的subs菌包前不包后,是不是就包括这个点啊,所以说这个方法大家注意执行之后的结果是什么,叫做点勾BG。好,然后大家看这个叫做后缀内OK吧,后缀名,然后下面呢,我们后缀获取到了,咱们是不是来获取UUID,获取这个UUID就行,然后是UUID是咱们的java.u求这个包下面的点random u u ID,然后点to string,把它给转换为字符串啊好,然后UUID,然后那我们现在大家看一下咱们是不是需要去拼接,然后一个对吧,然后新的文件名,文件名然后怎么写,叫做file name,然后等于谁等于我们的UUID,然后来加上咱们的后缀内OK,这就是我们当前一个新的文件名,这个时候大家注意,咱们就可以保证每一次我们所上传的这个文件的名字它一定是不一样的,OK吧,行,然后咱们先把它删掉。
07:29
然后下面呢,我们在这咱们就可以来重新部署,然后咱们来测试一下啊,好,这个就是我们来解决这个文件重名的问题的,知道吧,非常简单,咱们只要把这个之前的文件名呢给它换一下,换成是一个永远都不重复的名字就行啊。好,然后我们现在来刷新,然后咱们在这呢,先上传一个,一点勾BG,然后点击上传,大家看这啊来,你看咱们当前这个文件的名字对吧,大家见过没有,咱们从百度上或者说从好多地方下载下来的文件,它长的是不是就是这样的呀,对不对,对吧?好,然后咱们再来上传一个,比如说咱们上传一个对吧?啊,这个一点勾PG,然后点击上传,然后大家看看这里面没有任何问题,对不对,好啊行,所以大家注意,这就是我们来解决文件重名的一个问题啊,大家一定要知道该怎么去解决,其实就是把我们当前咱们的这个文件名啊,然后用一个这个随机值对吧,然后永远都不重复的值来替换一下,来作为新的文件名,再来实现上传就可以了,OK吧,行啊。
08:36
好,那这是我们当前的文件上传功能啊,文件上传中大家需要注意它比较着咱们的文件下载呢,要复杂了,要复杂一些,比如说我们需要去设置一个文件上传解析器,然后咱们的文件上传功能呢,还需要用到另外一个依赖,叫做commons-file upload,对不对?好,然后咱们最后呢,还需要来解决这个文件重名的问题,OK啊。
我来说两句