00:00
好,我们继续来上课,那么通过上节课呢,我们对这个相册的功能啊分析,那么现在呢,我们总结出我们需要有这么一个文件,对吧?这个文件里面会包含了这三个功能,一个是咱们图片上传,一个是多品图片上传,还有一个是什么缩略图这几个功能啊好了,那既然是这样的话,我们先把这个功能来完成,完成这些功能以后呢,我们再进行实现这个相册所需要的这些所有的效果啊好了,那我们去找到我们的这个页面。打开我们C盘万六十四下边3W下边的online。零一十九。右键打开。好了,然后呢,在这里边。我们把这些关掉啊。在这里右键。打开。PP文件我们叫做。杠UC。PP这么一个文件对吧,这个文件是我们一个什么全局的函数文件嘛,对吧,我起名也叫global了,也就是说我在我在线相册中所需要用到的所有功能。
01:11
所有的功能都封装。该文件中,该文件中,那最后我是不是只需要包含这个文件就可以了,对不对,那好了,那第一个我们要实现的功能什么呀?叫做单要实现一个这个单文件上传的函数啊,那在我们上一关当中我已经讲过这个函数了,那么一样在这里边我们再去写一下啊,那么第首先我们要写函数,我们可能先去定义这个函数,比如说function我们叫做upload啊,单文件上传的我们就叫做upload。那好了,那它都需要有哪些功能呢?首先你要告诉我你的这个表单的名称啊,叫做PHC,然后呢,再告诉我你要保存呢路径PH,同样这个路径我可以给他一个默认的对吧?然后还有什么呢?还有你的这个默认的这个允许上传的大小,比如说我也给你默认的变成5万,对吧?然后还有什么呢?还有你默认的这个数组。
02:01
Dollar type,也就是你允许上传的类型都有哪些啊,等于这个A,比如说这里边有这个image。Gpeg对吧,然后image I image PG,还有image GF是不是这些,哎,那OK,这就是我们这个函数,那么现在在这里边我们再给他先去写一下它的备注啊,那这里边函数名称叫做upload对吧?干嘛的作用呢,就是文件。叫单文件,单文件上传函数。好了,然后这里面有哪些参数PA。I'm第一个参数干嘛呢?上传表单的名称啊,第二个参数呢,是我们的可选参数对吧?也就是可选参数叫上传保存的路径。啊,然后再往后第三个参数PM也一样可选。参数叫什么?叫做这个允许上传文件的大小,还有这个第四个参数。
03:04
可选。参数叫做允许上传文件的类型,对吧?哎,那好了,那最后呢,我们是不是还要有返回值啊。对吧,那返回值也一样,Re e ti啊,如果。上传成功。返回一个数组对吧,然后包含哪些信息呢?包含上传。的图片。入境。或者别的图片了,文件的啊,文件路径以及上传的这个名称,名称还有什么呀,还有这个上传。后的详细。信息,这是我上传成功以后返回的,对不对,那如果失败呢。如果上传失败,返回什么东西,是不是返回对应错误的字符串信息啊,哎,也就是说咱们不会把它的报什么错给他一干嘛,给他做一个提示啊,好了,那现在这就是我们这个单文件上传所需要的这些功能和参数,我们是不是就有了,有了以后咱们再做文件上传,咱们说白了是不是就是把这个叫做Dollar下划线费这个数组里面所有的内容给他做一个判断的,对吧?因为我们为了什么,首先我们为了这个安全考虑,对吧,我们需要去。
04:19
判断什么,判断它的这个大小啊类型啊,对不对,还有他的什么,他上传的这个图片的名称啊,对吧,我们要给他做一个不能重复的对不对,哎,那好了,那这些完事以后我们在干嘛,是不是才开始移动我们的图片,因为我们讲过,我们所说的上传图片就是把本地的一个内容干嘛呀,通过网络传输到服务器当中,但是它有直接传输到服务器的这个我们指定的目录吗?并不是,它是传到哪儿呢?传到服务器的一个临时目录,对吧,这就是一个垃圾目录啊,那这个垃圾目录会干嘛呢?会把你传入的所有东西都干嘛,都去改一个名字对吧,改成什么什么点tmp的这么一个文件,一个不可以执行的文件,那么好了,那在你提交了这个PP脚本执行结束之前,如果你能从垃圾目录中把这个文件移出改名,那么就保存成功了,对不对?上传成功了,那么如果在这个文件运行结束以后,你没有去移动这个文件,那这个垃圾目录是不是会自动帮我们上传删除我们上传这个文件?
05:13
对不对,所以我们只需要干嘛,其实我们最终上传就是需要把这个文件挪出来,在挪之前我们要做一系列的判断,对不对,但在做这个判断之前呢,在做这块判断之前,我们是不是需要把这块判断给判断一下。也就是说当你从浏览器。提交到服务器这个过程中,对吧,提交到临时目录这个过中,如果在这个过程中如果都已经有错了,没有上传成功的话,那么我还有必要去判断你上传的类型啊,你上传的大小啊,和你保存的这些图片名称啊,这不就没有必要,哎,所以第一件事干嘛,我是不是先去判断它的错误号对不对,哎,也就是说这里边我们第一件事儿要去判断。嗯。绰号啊,然后第二件事干嘛,是不是去判断,当绰号就能通过以后再来判断上传的类型,对吧,然后还有这个判断上传。
06:06
的大小大小对吧,然后再来判断什么呀,判断上传后保存的目录对吧,以及第五件事干嘛是不是重新命名啊,重命名啊,因为目录只要存在了,有了,那我们就开始干嘛重命名了,重命名完事以后,接下来什么第六件事儿是不是才开始移动图片。哎,是不是把这六件事做呀,哎,好了那么一样啊,现在我们再来回顾一下,再来看一下这个费里面到底有什么东西,但是我要想用的话呢,我是不是得需要有一个表单的支持啊,所以在这里边。我们来创建一个A加码表单啊,比如说这个就叫做呃,Test一个测试的。好了,在这里面我们去写一个form,但是我要需要用到文件上传对吧?一样啊,我就提交到global里了,我只要用到文件上传,第一件事我的传输方式是不是必须为POS的,第二件事儿,我必须指定什么,指定我们那个表单的传输编码格式吧,叫做没呃。Beautypad。
07:02
M。U。PE对吧,等于什么MU MU from date好了,那这个完事以后,接下来里边我们去写一个,呃,费费起个名字,比如说就叫pic,或者就叫做这个行啊,就叫pic吧啊。好了,然后我们再给他一个提交按钮啊,Input s进行提交。好了,那现在我们开始来访问。这里边。我们自己新建一个,新打开一个窗口啊,Online下边的零一下边的LESSON8,然后诶不对。LESSON19啊,然后在这里边有一个test的码,对吧,选择我们要上传的这个图片,然后点击提交时。哎,没有打印吗?还是我没有什么呀,没有调用啊。没有调用这个函数吧,对不对,那OK,我们调用一下叫做up。漏的调用完之后,把你的名称,我们表单名称叫pic,其他的都无所谓了,对吧,只需要把名称给他就可以了。
08:05
那么这个时候咱们来看我是不是拿到这么一个数组,对吧,那最终我们就是把这个数组,也就是说pic它本身,注意它本身是不是一个二维数组啊。对吧,我们需要把这个二数组中叫PC的这个数组里边的每一项是不是都变了一次,对不对,都去判断一次就可以了,所以在这里边第一件事儿,你看好了我干嘛呢?我在这里面去接收一下啊,叫做。接收变量啊,Dollar,比如说叫fill,等于什么呢?等于Dollar pic,不对,是Dollar下线S里边的piic。等于这个啊,等于完以后,接下来我们去判断它的错误号,那也就是说如果啊,Dollar Bill里边的e r or。要是大于零也就错号,一旦大于零时代表的有错误,那是什么错误呢?Space把它加进来啊,糟了,Fail里边的这个ER。
09:00
Case啊,如果等于一的时候,等于一的时候是不是超过了PP的配置文件的设置,所以一个叫做超过。pp.ii中。这个叫做upload upload-max max-size设置的值没错吧?哎,这是我们配置文件里的,你看那只要执行到一,我是不是就返顺的这句话,这句话是不是就是一个字符串对吧?也就是说我这个函数只要是执行有误,就会返回一个字符串的报错错误信息对吧?然后再来K等于二的时候。继续return,那是不是就超过了A特曼表单设置了,哎,超过对吧,科特莫勒表单中设置设置的值我就简单点写啊,设置的值其实设置是哪个值,是不是这个最大上传文件的那个大小啊,叫什么max-size post-max这个size吧,对,然后再往后K-三的时候叫做IET瑞return。
10:01
叫什么部分?部分文件被上传对吧,然后上传这里边再来。Case呗,试的时候,试的时候是不是就没有文件上传了,所以这里边叫做I return,一个叫没有文件上传,然后。再来K为五,有五吗?没有吧,有六对吧,哎,唯独没有五啊,存一个叫什么找不到,找不到临时的文件啊,然后再来case,等于七的时候,七的时候是不是就写入失败啊,哎,Rer re,比如说叫写入失败应该是什么?没有权限对不对,哎。较乱。权限不足,写入失败啊好了,那现在我们这个错误是不是就搞定了,那如果没有走到这里边,那是不是就可以继续判断上传类型了,那也就是说如果你的这个feel里边的这个type。TYP要是在在什么在我定义的这个类型当中,对吧,TYPE啊,那这样的话,我是不是得用一个函数叫做因和锐这么个函数,对吧?系统函数判断谁呢?判断你上传的这个类型是不是在我定义的这个table的数入中,如果在那我就不是给他取反,也就是如果不在,不在的时候,我是不是就给你干嘛?Re TY re,顺返回一个这不算法叫什么上传文件的类型不合法呀,对吧,好了,那他不合法的,同样那我再判断什么,判断大小是不是也一样,这里边到了。
11:28
里边的这个,诶。费用里边的size SI要是大于了你定义的这个size,那么这个时候。怎么办,我是不是一样,一个叫做。上传。文件。扩大。对吧,哎,或者你给他提示你定义的是多大对吧,超过了谁跟谁的这个大小,对吧,比如说上传文件。上传文件啊,大小超过了超过。
12:06
啊,或者说不能大于吧,并且超过了啊,三传文件文件大小不能大于size。搞定啊,那接下来判断什么保存的目录吧,保存的目录第一件事我是不是得处理一下路径啊,对吧,4.14.1叫做处理。路径信息了,因为什么用户再去给你传路径时候,有可能是比如说传一个什么upload l upload有可能这么传,这是一个合法的路径,对吧,也有可能是什么呢?Upload再加个斜杠,这是不是也是一个合法的路径,对吧?所以为了这种安全,那我需要干嘛,我需要去给他处理一下,那比如说这里面follow pass,等于什么RTM。RTMR删掉哪个字符串,是不是pass这个字符串,这个右边的这个横线,删完以后我自己连一个横线对不对,哎,你有就给删除,没有是不是就直接连了,哎,好了,那完事以后这个pass我说有了,有了以后接下来我来判断取反。
13:05
非杠个,如果这个pass不存在,不存在的时候,我是不是要自己手动创建makec DR创建这个pass目录了,但是这个pass目录有可能什么,有可能是递归的,也就是说阿洛录里面比如说包含了th mbth HUB里面包含了一个什么2020对吧?2020里面比如说包含了一个12月,12月里面包含了一个12日,对吧,是不是这种目录,那么一旦遇到这种递归的,那我们那个D是不是就会报错啊,所以在这里边我需要给他设置第二个参数权限,0717,给他最高权限,然后第三个参数给他,它设置为处,那么这个组设表示允许干嘛呀递归的方式去创建目录了。哎,好了,那这块完事以后,接下来呢,我是不是要重新命名了,那重命名的话,我就需要去获取我们这个文件的后缀名,对吧,比如说获取这个文件的后缀名啊。到了。Su。Fixx等于什么呢?STRCHR在这个字母串中,Feel-name这个字母串对吧?这是我们图片名称啊,找到点最后出现的位置是什么?点gbg.df是不是拿到这个类型,拿到这个后缀,拿到这个后缀我是不是就可以跟我的名字来拼接了,那这里边我new name一个名字,比如说这个名字我用一个什么UNIQID,就是返回一个唯一字符串,加上什么当前的时间戳,再加上一个MT-round再来个随机数。
14:26
MT啊,撞了再来随机数对吧?然后把这些我都给它加到一起,我用一个MD5给它加密,我用MD5加密的意,这个意义在哪呢?就是让它的这个长度是统一的,对吧?你比如说我MD5加密完以后,它会返回32位的字符数,这个字符串对吧?然后咱们连接是什么?我们不能光是这么一个字母,因为这一个字母它只代表这么一个名字,完整的格式是不是还有点GPG,是不是还有这个后缀啊,对不对?所以你看比如说32位加这个点三三加它3435。36,也就是说这一串名字最长,现在我们看36,那如果是点击B33是不是37了,也就是说这个名字是不是最长也就37左右啊,哎,所以这个长度是我们可控的啊,然后连接上Su fxx好了,这就是我的图片名称,那么你就一定能保证这个图片名称是唯一的吗?
15:15
也不一定吧,对不对,我们上传过来到服务器里面,一定要保证这个名称是唯一的,为什么?因为图片是用户上传的,不管他上传的是。什么样的,只要是符合要求了,我们允许他上传成功了,那就不允许让别人去替换了,对不对,所以这里边为了保证它是唯一的,我干嘛进行不循环去创建。啊,因为度是什么,是不是先执行循环体对吧,执行完循环体以后再执行什么执行这个V表达式吧。对吧,也就是第一次它是不遵循V表S的这个条件的约束,剩下每一次循环是不是都要遵循V尔表S约束,所以V表S的约束很简单,那就是费尔杠eiss判断谁呀,判断这个pass路径下面的这个name存在不存在,对吧?如果存在是不是,那我就继续再次循环,重新做了一个名字是吧?如果不存在的话,那返回报纸那一次就完事了,对不对?哎,好了,那我的图片名就搞定了,搞定以后接下来干嘛?是不是叫移动文件了?
16:10
那这里边移动文件我们也一样,用指定的这个专门是移动上传文件的,叫做move upload file这个函数就可以了,然后你要移动谁呢?我要移动file里边的type name对吧,把它移动到移动到pass下边。叫做。啊。那如果移动成功,我是不是要这个返回一个信息,对吧?所以在这里边我先定义一下,比如说Dollar image info吧,Image info等于什么呢?等于一个aiy,一个空的输出,好,然后在这里边那就是Dollar image info。中括号里边的name name me就应该等于我的new name,我的图单独的图片名称对吧?然后再来以面音,它的这个路径等于Dollar pass,然后再来一个详细的信息,到了image info里边的叫做pass info吧。
17:05
就应该等于什么Dollar pass,连接上Dollar new name OK,那这是不是整个上传图片信息就搞定了,哎搞定以后,那如果否则也就是他移没有移动成功的,那我就直接退一个叫什么重新上传。请重新。上传对吧,然后最后re TY return怎样return Dollar image info是不是就可以了?哎,那现在我单文件上传函数是不是就已经封装好了,哎,好了,封装好以后,现在我们来调用一下啊,比如说就一样了,默认就用这个upload了啊,然后在这里面我们来接收它的这个反馈结果,然后我们来打印它的反馈结果,未安放DP打印谁呢?打印这个Dollar re,好,那现在我们再回顾来看。返回来刷新一下,选择一张图片,点击上传,上传以后你看告诉我的图片名称是它,我的保存路径在这儿,然后我的音符信息是不是详细的路径在这儿,那好了,现在来看,在我们的LESSON19里边是不是多了一个upload,打开upload里边是不是有这张图片,那么单文件上传我是不是就搞定了?
18:05
哎,那OK,这节课我们到这里。
我来说两句