00:00
接下来呢,咱们把昨天的那个内容,诶这个下载讲一下,咱们昨天讲的上传,今天来看一下文件的这个下载,那文件的下载大概是什么样的一个情况呢?咱们来看一下哈,首先呢,这边是这个客户端。哎,就是浏览器客户端浏览器好了,这边是什么呢?是服务器。好。OK,嗯,服务器就是咱们这个cat了,然后呢,由客户端发起这个请求。过来。啊,发请求。好。然后告诉服务器,诶我要下载什么文件,大概就这样子,诶我要下载什么文件好了,那服务器这边大概什么样子呢。
01:03
咱们稍微说明一下哈,一个呢,就是什么呢?嗯,获取要下载的文件名,大概就是这样,第二呢,读取要下载的文件内容,下载的这个什么呢?文件内容是吧?呃,第三就是什么把内容。下载的文件内容回传给客户端,好,大概就这么个情况,但是光把这个数据回传给客户端就够了吗?大家注意看一下哈。第四,在回传。前告诉什么东西呢?客户端应该是回单前通过响应头告诉客户端返回的数据类型是什么,你得跟人家客户端说我返回的数据到底是图片呢?呃还是文本呢?呃,还是压缩包啊等等,因为不同的类型客户端的默认处理方式是不同的,然后五还要干嘛呢?哎,还要告诉客户端收到的数据是用于下载使用。
02:17
啊下载使用,那怎么告诉客户端下载呢,还是使用响应头,诶还使用响应图,大概呢,就是这样的一个操作步骤和过程,好了,那么我们在这边啊。咱们还在这边select里面再加一个来处理这个下载,咱们就叫做download download吧,啊好,它继承http select,好,那么方法呢,是do get。OK,那多干里面大概要干什么事情呢?就是咱们笔记里面大概的这几么,这几个步骤,哎,这么几个步骤好我给它放进来,然后呢,都给它注掉,OK,首先呢,获取下载的文件名,咱们文件在哪啊,大家注意看着哈,我现在服务器这边准备一些需要下载的文件,呃,比如说我在这里放一个目录叫做饭啊,咱们到第一天里面来准备一下啊,准备一个图片吧,咱们就随便拿一个。
03:29
OK。啊,或者说你再放一个其他的,我随便找两张。OK。好,这里就是咱们要下载的图片了,好了,那么这个地方啊,先要获取这个下载的文件名,咱们可以先把这个下载文件名先写死了,咱们就说下固定的下载,2.gbg是吧,那好吧,来download file name固定是多少啊?2.gpg,好了,这咱们了解一下,那我要读取下载的文件内容,怎么读取,大家注意看着哈,咱们括弧通过serve let content对象可以读取啊,通过它呢就可以读取了,来,那咱们得先获取到这个对象。
04:25
怎么获取啊,Get contact创建一下,OK,创建出来了怎么读,大家看get resource。As string,这个get resource as string,你看获取资源,哎,像流一样的返回,你看到吧,那这里放的是什么东西呢?大家注意放的就是这个文件的路径,这个文件在哪个目录下,在file这个目录下,那怎么办?大家来看一下斜杠,File斜杠,咱们说大家注意在服务器端第一个斜杠表示什么,咱们说啊。
05:08
斜杠。被服务器解析表示地址为HTP冒号双斜线IP地址。端口号工程名对吧,映射到代码的什么东西呢?这个web目录。就到这边这个目录了,那么斜杠后面跟着file就到这个目录,然后呢,跟着这个文件名跟上,它叫做do,哎呀download诶什么的,Download not fair,诶,它就会读取到这个文件,好大家看一下就得到这个文件了,那么得到这个文件之后,它得干嘛呀?读取它里面的内容回传给客户端的。
06:03
来我们看一下啊,它怎么读取呢,按照咱们以前的情况呢,咱们是定义一个字节数组是吧?哎,然后这个一零。二四是吧,然后呢,不停的去while去读。但是呢,大家注意,咱们昨天做文件上传下载的时候,导进来一个包叫做什么呢。叫做come on IO这里面呢,就写好了这个IO的操作的工具类,咱们直接使用它就行了啊,它有一个叫做什么东西呢。打开这里面叫做。IOUUS是吧?在这个工具类里面就可以直接用了,它可以直接做流的操作,怎么用啊,注意看着啊,呃,就是IO us用的是哪个commands下的点copy,大家看一下,一个输入流,一个输出流,一个输入一个输出是吧?来,那咱们先获取一下输出流啊,Output string等于response。
07:18
点get out string,这是干嘛呀?去获取响应的输出流,然后得到两个流之后大家注意看一下啊,IO us copy。哪个这个啊。Louisa string,然后后面是什么?是outpput string,大家看这是一个什么,是复制。你觉得复制是什么?其实就是把这个输入流里的,诶,这个流的内容读完,然后把它写给他嘛,他们俩的内容完全一样,不就是复制吗?是吧,将它复制给他,好读取输入。
08:05
啊,读取流中全部的数据,哎,那么输出给输出流,复制给输出流去输出是吧。给输出流啊,输出给客户端好了好了,那么操作完之后啊,看着啊就已经实现了第三步了。这里题就已经实现了第三步了,好,那么大家注意看一下哈,按照这个操作我们说还需要干嘛,还需要在回传之前呢,告诉客户端你返回到数据类型是啥。啊,那我们把这个都拿过来吧,其实这些操作呀,都需要放在这个前面去操作。好,大家看一下哈,我要告诉客户端返回的数据类型怎么操作呢?这里就是response.set content type。
09:01
哎,这里呢,需要一个类型,那这个类型怎么获取啊,诶大家注意看,通过can这个方法get mine type,我不知道大还记得没有,Mind就是数据类型的字符串描述符啊,这里呢,需要给到这个路径就行了,这个路径呢跟这个路径是一样的,下载文件这个路径一样,你把它拿过来。好,咱们说这是干嘛获取要下载的文件类型,咱们可以打印看看。下载的文件类型。Type啊,然后呢,把这个类型的值设置到这个方法里面,你看c CL type啊,这就是告诉客户端返回的数据类型是啥啊,返回的数据类型是啥,那现在呢,咱们第五步先不做啊,咱们到此呢,基本上就可以先运行看看效果了,可以先运行看看效果了,咱们这个单位呢,给他配置一个访问地址啊,咱们还没有配置来。
10:21
咱们叫做的杠内,哎,这个呢是大lo。好,然后呢,给它配上这个访问地址,Mapping STEM就是download。好,再给他来一个URL pattern斜杠download写好了以后记住啊,配置文件写好之后一定要重新部署啊才能生效,呃,咱们启动一下走稍等一下啊,他正在启动编译,正在编译啊。
11:15
好啦,启动。啊,这个部署启动成功,好,这边呢,咱们注意看一下。我在这里输入这个访问地址downloadlo,走,大家看这个图片是不是下载过来了,然后这个图片下载的类型是啥?咱们可以看看这个打印你看见吗?就是一个图片类型,这是大类型,后面这个是小类型,表示它是一个JPG的类型啊,就得到这个文件的类型了,然后大家注意看一下哈,咱们读咱们现在这个操作是什么是下载啊,但是把这个数据返回给客户端之后,客户端干啥了,直接把它显示在页面上了。
12:05
而我们希望它干啥,我们希望他做的是下载的操作,哎,所以在这个地方大家看一下。咱们还要告诉客户端收到的数据是用于下载的,哎,而不是让你直接显示的,那怎么办呢?注意看一下,就是b.set还要设置响应头,那么哪个响应头呢?大家来看一下哈,Content第position,诶,这是啥意思?咱们先说一下content Dis positions响应头表示啥?表示收到的数据怎么处理,大家可以看下哈,Can的是内容啊,就返回的数据嘛,是吧?Dis position呢,翻译一下。是不处置处理啊,就你怎么处置怎么处理,那怎么处置怎么处理呢?Attachment。
13:07
啊,Attachment,然后file name,咱们看下,这是附近的意思。啊,没有出来是吧,啊touch诶。啊,我也忘了,咱们看看笔记吧,啊来,就他这单词我写不上来。写操看看啊,这表示什么东西呢?大家看这个表示附件表示什么呢?附件的意思。哎,附近咱们可以翻译一下。走,你看附件,那么附件是啥呢?我不知道大家有没有关注过啊,那么邮箱里的附件是用来干啥的?不都下载的吗?哎,就表示附近,表示下载使用,就这个意思,然后find name。是什么?继续看的话,文件名来看file name等于表示指定下载的文件名,你要告诉他下载这个文件叫啥名字啊,那这个名字呢,其实就是这里的这个了,你把它拿过来就可以了。
14:23
好就行了,有了这一句呢,它就可以用于下载了,那咱们清了以后重新再部署一次。重新再部署一次。稍等啊。好,部署成功了,部署成功以后啊,咱们来看一下哈,现在。咱们拿到这个地址再打开一个再来注意看啊,我一会敲回车之后,大家看这个地方走是不是下载下来了,哎,这就可以下载下来了,好,这就是咱们的文件下载。
我来说两句