00:00
啊,那接下来的话给大家讲一个扩展性的东西啊,这里面没有提到,我们直接来到开发工具里面去讲啊啊啊,那现在我要做什么事呢?大家注意啊,我先来到这儿啊,先到index这B中,呃,好,我们写个A是吧?呃,这个A呢,我们就发送一个请求,比如说我们要去什么呀,下载了对吧,我们就发送一个,呃。Download的吧,对吧?啊,比如说呢啊,我们就写个啊点我是吧啊下载宋老师是吧啊私密图片是吧啊对吧啊你点开一下,然后呢,你就可以去下载一个图片了,那么点这个的话呢,我们就需要去发送一个请求了,那么这个请求的话呢,我们就需要在我们的后台去写一写了,啊我们来到这好,这是我们的一个呃下载啊就是使用我们的http message啊完成一个下载功能,OK啊呃,大家注意呃手先的这个HT message呢,它支持我们啊,就是它支持啊这么几个东西啊,就是一个是request body。
01:15
诶,停掉它支持这个啊,Request body支持我们的response response body还支持我们的http entity,以及我们的response entity啊这个几个呢,是他支持的,然后在这几个里面的话呢,大家注意response body是我们必须要去使用的,能明白吧,像这个东西,这个东西我们就不用再去知道了,这个呢,是我现在要去用的,我要通过它去完成一个下载的操作,听懂了吧,OK,那么原理是什么呢?就是我们可以什么呀?哎,就是,呃,先说一下这个下载的原理吧,大家知道什么叫做下载吗?
02:04
呃,其实就是什么呀,将这个服务器端的呃文件以什么呀,哎引流的这种形式是吧?啊引流的形式啊,然后呢啊写到我们什么呀,什么客户端呀,对吧?这就是我们的一个什么下载的原理,就是你把服务器端的一个文件,然后呢,通过一个请求呢,把它什么请求回来,然后让服务器端的把这个数据通过流的方式呢给你写回来,明白了吗?这就是一个下载的原理,而我们这个response安的原理是什么呢?啊我们可以什么呀,我们可以什么将呃将什么要下载的啊文件数据以及一些啊以及一些响应信息啊,就是封装到我们的response and就是一个响应实体嘛,对吧?呃封到了这个对象中,然后呢,呃浏览器端到通过什么呀,通过。
03:05
解析我们的啊,解析我们呃,发送回去的这个啊,解析这个发送回去的响应数据啊,发送回去的这个响应数据啊,就可以什么了,然后就可以进行一个啊下载操作了,能明白了吧?诶通过一个发送回去的响应数据啊,那么它就可以完成一个下载操作啊好吧,这是我们的一个原理,那么接下来呢啊,我们就来把这个呢给大家去写一写啊,那么这个方法呢,我们就是一个注意现在我要返回的是一个response对象,能听懂吧,然后这个里面我们保存什么呢?我们保存的是下载文件的一个字结数啊,所以说呢,我就直接给它写一个BY数组,我要把我的文件呢,先读成一个BY数组给它放到这,将来的话你就给我写回去,好,来我们的下载啊,测试我们的。诶,Download的下载操做好,这个地方request叫mapping,它是一个什么来着,Download落的吧?诶这样的一个请求啊好吧,那现在我们要下载谁呢?大家注意啊,我要下载一个图片啊,这个图片呢,我没写错地方吧。
04:16
没有是吧,好,这个图片呢,我们就放到这个web content下面,明白吧,来我在这个web content下面呢,去用一个呃,Float啊,比如说我们就叫做啊image是吧,在这个image下面的话,我们放一张图片啊,啊这个我来找一个图片是吧?啊,之前这个学生发给我的啊,哪个最后一个行眼神还挺好使是吧?啊来我们就放到这啊,然后为了方便操作呢,我把这个图片给他改个名字啊,就是省得我去写那么长啊,我就写一个什么呀啊。宋老师是吧,啊宋老时间够费劲是吧?OK,好,那我们就把它写到这,然后呢,大家注意了,呃,如果我想下载就是将来的话呢,你看啊,虽然说我图片是在这儿的,但是我们把这个整个的项目部署到我们这个tocad上面以后,这个图片是不是相当于也就到我们这个tomca的服务器上面了吧,所以说我们其实是从这个看的这个位置呢,把图片下载到我们这个本地的,能理解这个意思吧,所以说现在如果我要下载的话呢,我就得怎么做呀,我们先得诶就是将啊将这个要下载的这个文件啊,读取成一个什么呀,字节数组,那么这个事情我们怎么做呀,那么首先呢,就要去定一个字节数组啊,比如说BA,然后呢啊我们的呃。
05:50
取个名字吧,比如说RGS吧,好吧,啊,就是先把它什么生理出来,能看懂,能看懂吧,这是一个什么字节数组啊,好,那么接下来的话,我们就得想办法去读到我们的这个图片了,那么怎么读到这个图片呢?这个图片呢是放到我们的服务器端的,所以说呢,我们必须要去读它的一个什么真实路径啊,那么这个真实路径的话呢,我们需要用到一个sorry contact这个对象去读啊,因此呢,我们在这里面去放上一个session声对象啊,放session也行,放这个request子也行啊,然后呢,做什么事呢?大家注意,我们就可以通过这个session啊,就是获取到一个solve contact对象,还记得它吧?诶三省两盖solve content获取到它以后呢,我们就可以去读取我们的谁呢?诶,读取我们这个图片了啊,怎么读呢?就是SC点有一个get resource as stream,看到没有。
06:49
看到了吧,你给他一个路径啊,比如说你给我去读谁啊,读这个image下面的。宋老师是吧,好,第二叫啥来着,Go是吧?来GOJOK,好,你帮我去读这个你卖的这个文件夹,文件夹下面的这个图片,好把它读回来以后呢,这就是一个流啊,它就是一个input stream。
07:18
好,就是我们的I Apple STEM,那么我接下来是不是要从这个流中把每一个字节数都读出来,把每个字节读出来是不是放到这个里面啊,对吧?那么我们要去想了哈,呃,你这个到底有多少个字节呢?我是不是要去创建多大的一个字节数组啊,所以说呢,这个位置我们用到了这样一个方法啊,就是in GS的new一个bit数组,然后new的时候呢,这个大小我们怎么写呢?流里面有一个叫做V,就是什么意思啊,就是能读取的字节数大小,就通过这个方法我就获取到了,那么正常你读取到你能读取到十个字节,那我就创建一个十个长度的一个字节数组是不是行了,对吧?OK,那么这个的话有个异常,有异常的,我们就给它去声明一下,就可以听明白了吧,把它声明一下好拿到这个以后呢,接下来我们要做的事情就是什么呀。
08:11
是不是in.read然后呢,把你的IMGS传进去是不就可以了,这样的话呢,你看一下是不是就相当于我把我这个流中所有的字节都读到这个数组中了吧?那么其实现在这个数组中保存的是不是就是我们那个图片的数据了啊好,接下来的话呢,我们要什么呀,来将我们的响应信息啊,响应数据以及啊,以及一些什么呀,响应头呃,信息全部都封装到我们的response en中,OK,那么我们需要去扭出一个来啊,Response ening好如这叫什么呀?这里面放的是我们的bad数轴啊,比如说这叫什么re吧,等于new一个response ening,那么我们在new的时候呢,大家注意,这里面我们需要给上这么几个数据哈,我来看看用的是哪个啊。
09:10
呃,用的是一个是hi,一个是我们的这个t body啊,就bad速度的body啊,应该是它啊来我们得用上这么几个数据,看到了吧,这个body呢,就是你要发送回去的数据,那就是我们的IMGS能明白吧,哎,第一个这个参数啊,解释一下啊,第一个参数。好,第一个参数就是我们这个参数是吧,好参数,然后呢,第一个呢,就是我们要发送给这个浏览器端的数据啊,第二个呢,就是我们,呃,设置我们的响应头能明白吧,第三个呢,就是设置我们的应码,听懂了吧,就是你相当于现在是我自己去给浏览器端发东西了,明白吧,就不是服务器主动的去发的,是我自己发的,那我自己发的话,我就必须得告诉浏览器,现在我给你的是什么数据,你要做什么操作,而这些信息的话呢,我们就必须要通过响应头来去跟他去做一个对话。
10:17
听懂了吧,请求的时候是请求头数据,然后响应的时候就是一个响应头信息了,只有通过这种方式,我们才能让服务器与浏览器端诶做一个什么对话的操作,就是相当于我告诉你你要做什么样的操作,明白这个意思吧,那么这个里面的话呢,第一个我们已经搞定了,第二个这个hid,诶这个稍微麻烦一点啊呃,这个东西怎么做呢?大家注意哈,我们得去拗一个叫做啊,我看看啊,我有点记不住了是吧?HTTP啊。啊。是吧,然后呢,把它扭出来啊,Hi等于六一个HTTP啊hi OK,把它扭出来,扭出来以后呢,这里面我们需要去加一个东西啊hi的有一个ADDDD,就是一个是我们的,诶响应头一个是我们的,就是所对应的那个什么响应头的那个什么V,就是那个数据啊这个东西特别长啊,我根本记不住是吧,叫做什么count的什么什么什么的一堆是吧?啊,我先放一放,一会我去找一下参考的东西啊,这个大家也不需要记住啊,一会我来找一个参考的,直接把它拿过来啊好,假设现在他已经写好了,好吧,来下一个就是我们的响应码,那就是一个http status。
11:33
好,然后呢,呃,Thsw code等于什么呀?就直接等于HTTP,好,我得告诉他我响应给你的是成功的,那么OK,这个OK就是我们的200,能理解什么意思吧,就是告诉他我这一次响应给你的是成功的,能明白什么意思吧,每一次响应给人家,你不都得有一个状态码吗?比如说404,比如说302,比如说500,比如说405,对吧,200的话,那就是正常的好所以现在我们只需要把这个加上,最后呢,我们再把这个程一个re,诶,这就可以了,那么对于浏览器来讲,它就知道,哦,这是一个下载操作,我要把这个以什么呀,图片的形式给它保存起来啊,所以说呢,怎么告诉他这是一个下载操作呢?就是通过它来做的,你要通过这个消息头来去设置啊,这个值特别长啊,我就不再给你写了,我去找一个参考一下啊好大家稍等一下,嗯,我之前的课件里面是有的是吧。
12:33
呃,找一找好吧,我们就参考一下啊,这个大家不用去。不要去管啊啊,我给你找到它,然后呢,我把它写出来就行了,嗯,再找一找啊好在这个位置,你看就是这个东西啊啊什么content disposition是吧,来吧,我就写一写吧,啊content disposition啊,我就写到这啊。
13:02
T吧啊,Di什么来着?Posi p是吧?这谁能记得住啊,后面这个大家注意了啊,At t MU是吧?没有是吧?啊MU,然后呢,呃,后面呢,我们再加上一个fair name OK,后面的话你就可以写上一个随便名字了啊这个我们就不用再去参考了,给大家解释一下,这个呢,就是一个消息头啊,这是固定的写法,你不能随便去写,后面这个能告诉他我是一个附件,大家明白什么叫做附件吗?知道什么是附件吧?诶就是告诉浏览器这个家伙是一个附件,并且呢,附件的名字是什么呢?啊就是啊宋老师点过倍记对吧?啊,这个你也是可以随便写的,这个是干嘛的呢?就是你在下载的时候,人家是不是提示你,你要下载的这个文件的名字是什么呀?对吧?那提示你的那个文件名字呢,就是通过它来去指定。
14:04
明白了吧,其实这个地方你可以随便写的啊,比如说啊,你写个其他的,写个A写个B都是没有任何问题的啊,所以说呢,就是通过这个消息头呢,来告诉这个浏览器啊,我是一个附件,并且呢,你要做一个保存操作啊,你要保存这个文件的名字呢,诶我提示的时候告诉你这是一个,诶宋老师家高费劲。听明白了吧,OK,好,那把这个完整的写好以后,接下来我们就可以进行测试了啊,那我们先不要用IE测试啊,我们先用这个火狐吧,啊,还是我比较喜欢的火狐是吧?来我把这个启动一下啊,服务器还没有启动。来把服务器的给他启动一下,我们看看这个下载操作能不能完成是吧,啊启动。然后呢,缓慢一下。
15:04
OK,来我们现在呢,就去点一下啊,点一下诶大家来看一下,他现在就已经开始提示你了,你看这就是一个下载吧,来你看你选择了打开,注意这个名字是吧,这个名字就是我们通过通过谁呢?就是通过它来进行设置的,通过我们的I file name就是它你这个地方写什么,那么将来在页面中就会提示你什么,然后他问你,你是要打开呢,还是要保存呢?对吧?啊比如说我们要去保存这个文件。好,来注意我们点个确定好,他就把我们啊保存起来了,应该啊保存到哪了呢?来保存到这个位置了是吧?我们可以打开看一看是吧?啊,这是宋老师的私密图片啊,OK是吧?那这就是一个下载的操作,能明白吧,那么这个话题的话呢,大家做一个了解性的东西啊,就是你不需要完全把它掌握,因为这个学起来其实也相对来说比较麻烦一点,听懂了吧,但是你要知道下载的原理,以及我们这个response energy的这个原理,对吧?那么这个的话呢,它也是由我们的谁来支持的呀,由我们的message convert来去支持的。
16:19
听明白了吧,OK,好,作为一个扩展性的东西啊。
我来说两句