00:00
猪的情况来大家来看啊,咱们在上传的时候呢,有一种特殊情况,什么情况,你比如说我现在在这,咱们是不是上传了一个文件,是不是叫1.propg对不对,对吧?好,那如果说我现在呢,我在咱们其他的文件里面,大家看这是不是还有一个1.probg啊,那我上传上去之后,大家都知道,根据我们所写的代码,咱们上传上,咱们上传这个文件的时候,然后是不是应该对吧,上传之后是不是也存存在于这个目录中啊,对不对,而且我们上传之后,咱们的文件名是不是也叫1.ovg对不对,那这个时候会出现什么问题呢?大家看好会出现什么问题啊。啊,会出现这个小括号一吗?就是再出现一个1.obg括号小括号一,会不会不会是吧,那咱们就来看一眼啊好点击上传,大家看变了没变了,那变了说明什么?变了说明覆盖了,把什么覆盖了,把咱们当前这个文件给覆盖了是不是啊对吧?那文件能覆盖吗?比如说我这有个一点勾VG,我现在再放进去一个叫一杠副本的光倍镜。
01:16
是不是啊,我再放进去一个叫一杠副本杠二的括号二的勾V几,这文件能覆盖掉吗?啊,这文件能覆盖掉吗?哎,这文件能覆盖掉吗?应该是不能的吧,咱们大家看不懂这个效果吗?我复制一下,我又往这里面放了一个原来的就没有了吗?原来的不是还有吗?对吧,所以说这是覆盖掉了吗?那如果说他要是把文件覆盖掉了,那咱们看到了这文件能覆盖掉不能啊。文件能覆盖掉吗?大家看不懂这个效果吗?我复制一下,我再往里面放一份,这里面还是只有一个一点公分镜吗?
02:13
现在这里边有俩,所以说咱们放进去一个相同文件名的文件,会把原来的覆盖掉吗?不会覆盖掉,那是为什么会出现这个问题呢?确实是覆盖了啊,但是呢,覆盖的可不是文件,大家注意啊,它覆盖的是什么呢?大家应该都学习过咱们的IO流,特别是咱们的输出流是写的功能,对吧?那咱们说过文件上传就是文件复制的过程,所以说你要先读再写是不是啊?而我们在创建输出流的时候,大家记不记得创建的输出流中是有两个参数的,其中一个参数是我们输出文件的位置,然后第二个参数呢,是否是是否追加。
03:01
有印象没有?叫做是否追加。叫做不尔end,然后它默认是追加还是不追加呢?默认是不追加,也就是覆盖。所以我们当前咱们都指向一点勾BG的时候,它就将原来一点勾BG中的内容给覆盖掉了,所以说这不是覆盖文件,而是将文件中的内容给覆盖掉了。能听懂吧,好,然后如果说覆盖文件的话,我刚才已经重重重复复给大家做了好几遍,大家也能看出来文件能覆盖掉吗?覆盖不掉对不对,好,所以说大家注意啊,就是这个问题,好,那所以咱们现在要来怎么办呢?大家说我们是不是要来准备一个什么,大家想想。那既然这个名字会重复,那咱们是不是就可以让它的名字不重复,是不是就能解决问题了,对吧?那怎么让名字不重复呢?
04:06
判断一下,判断一下,如果名字一样我就不传了呗,是吧,你大家告诉我判断怎么解决。啊,判断怎么解决,判断有没有这个文件,如果有这个文件怎么办?把原来的删掉还是不传,换一个名字对吧?好,大家注意啊,那既然是上传,那咱们所有的文件都应该能上传成功的对不对?所以说呢,如果说咱们这个文件存在了,那其实你也没有必要判断,你只需要呢,然后给他写一个永远都不重复的名字就行,是不是啊,哎,行啊好,所以下面咱们就来看一下如何来解决文件的重名问题,大家都用过UUID吧,用过是不是,那UUID是不是应该是一个32位的随机序列是不是啊,对吧?好,那我们就用UUID来作为我们当前的文件名可不可以啊?
05:05
可不可以啊,可以吧,好OK啊行,那所以咱们在这咱们是不是就要对咱们的文件名来进行处理了,是不是啊,然后来对文件名进行一个替换,然后呢,将我们当前咱们的文件名啊,然后呢,把它的名字有UUID去代替,但是它的后缀咱们是不是还要保留上去,对不对,因为后缀呢是包表示我们当前文件的类型,你名字可以变,但是后缀能变不能啊,不能,所以说咱们在这咱们的第一件事情,大家说这个东西是不是应该是来获取什么,获取上传的文件的文件名是不是啊,对吧?然后呢,这个东西是用来干什么的,是不是通过咱们的serve let context context来获取咱们的服务器中谁的路径,PH photo文件夹的文件目录的路径。
06:05
能看懂吧,哎,好啊行,那咱们在这咱们写的是啥,大家说。啊,在这咱们是不是应该来解决文件的重名问题,对不对?好,那我们要解决文件的重名问题,那咱们是不是首先要来获得后缀,是不是啊。是吧,啊行,怎么获取来获取咱们上传的文件的后缀名,OK啊行,Fair name,或者说咱们在这来写一个叫street后缀怎么说。好后垂坠。咱没有学过后缀,前缀跟后缀吗?学过是吧?啊,咱们在MY里面学过,然后我们在咱们的中咱们也学过,对不对啊,然后叫做Su fix,叫S是不是啊,前缀叫pre是吧?然后叫s name,然后等于谁呀,这不是咱们的文件名吗?对吧?那咱们是不是应该是把咱们最后从从我们当前的这个文件里面把咱们的后缀名给截出来是不是啊,对吧?那大家都知道,那咱们的后缀名啊,然后前边是不是有一个点儿对不对,那咱们怎么写啊啊,然后点sub string,然后来截取,其中呢,有一个参数也可以,两个参数也可以,一个参数就是从哪开始截,默认截到结尾数是不是啊,第二个呢,就是从哪开始截,截到哪,那咱们应该用一个参数的就行了,是不是,那咱们是不是需要知道这个点在哪?
07:51
点fair name.in depth of双引号点是不是就完事了,这个获取的是不是应该就是我们当前这个点的索引没问题吧,而且我们当前subs string是包前不包后,那包括这个点不包括。
08:08
包,包括不包括包括这个点吗?是不是啊,对吧,包前不包后,所以说是包括这个点啊,好,但是现在问题又来了,大家看,你看这不是我们当前的文件吗?是不是啊,那大家说我可不可以这样,我当前的这个文件名里面可不可以这样啊,可不可以,可以没有问,没有任何问题,所以说呢,大家注意我们当前咱们的last index index of是不是应该是来获取这个某一个字符,然后在我们当前字符串第一次出现的,所以是不是啊,对吧?那咱们在这一获取是不是就不对了,所以咱们应该获取的是哪儿最后一次出现的,所以对不对?因为咱们的后缀名里面可能会有点吗?不可能,所以说咱们的最后一个点后边的内容肯定就是后缀名,能听懂吧,好,OK啊,行,然后在这咱们要把它给改成是谁呀?叫做last in that,能看懂不?
09:09
Last event of,好,然后这个时候咱们就可以获取咱们的后缀了,然后下面那我们是将谁来作为咱们当前文件的名字啊,将UUID来作为来作作为对吧,然后文件名,所以说呢,咱们在这来创建一个叫做UUID,然后等于谁u u ID java.u求是不是啊,点random u u id.to straight是不是。大家是这样用的吧,是不是啊,好OK,那咱们有了UUID之后,那我们当前咱们的文件名是不是啊,将咱们的谁呀,这个将咱们的UUID,然后和我们的什么后缀名,然后拼接之后的结果,拼接后的结果来作为最终的文件名,能看懂吧,好OK,然后file name等于谁等于咱们的UUID,然后加上S内能看懂吧,好OK,行,就这就完事了,来,下面咱们再来重新部署,大家来看这个效果啊。
10:28
啊,咱们把这个文件夹也给它打开啊,来下面咱们来刷新,然后来点击,比如说咱们在这呢,咱们就来选择一张一点勾笔机,OK吧,点击上传,大家看长这样的,他见过这种类型的名字吗?见过吗?你从那百度图片里边下载下来的图片,它不不是这样的,是不是对吧?啊都是这样的啊好,大家说这个时候我再上传另外一个一点勾BG,它会不会把原来的覆盖掉,因为UUID基本上是不可能重复的,除非我没见过它重复的时候啊,然后大家呢,也可以自己去试一下,应该是不会重复的,OK吧,好,然后咱们再选择一个1.pro,并点击上传,大家来看。
11:14
覆盖掉了没没有啊,行好,那有的,陈阳老师,这里面的横线我不想要,那你不想要,那咱们就替换一下就行,知道吗?你看咱们在这是不是已经获得了这个UUID了,对不对,大家都学过,里面有个方法叫replace or是不是啊,然后咱们是不是就可以把这个横线,然后给它替换成空字不差,是不是就完事了,能看懂吧?哎,好,当然替换也行,不替换也行,哎,我觉得有横线。也行,对不对啊,也可以啊,行,那这就是我们当前的一个文件上传功能,大家能看懂吧,能看懂吧,难不难呀。难是吧,因为这一共十几行代码,对不对是吧?嗯,行啊,那难我再说一遍来吧。
12:05
哪来呀,不知道。但是难不难呢?他就是难是吧。嗯,啊,OK啊。
我来说两句