00:00
我们来看一下stra two里边这个文件下载。首先呢,我们来明确一个问题,为什么ru two也会提供一个文件下载的功能?如果我们正常要是下载一个文件,这个文件要是固定的话,我们是不是提供一个超链接执行那个文件就可以了。对吧。但是在开发的时候呢,很多时候这个文件是需要动态生成的,举一个例子。比方说,我们要把数据库里边的某些数据。生成一个Excel文档,然后提供对这个Excel文档的下载,那这个时候这个文件的内容是动态的,文件名可能也是动态的,那这个时候呢,我们就要提供一个文件下载的功能,这个时候是没有办法提供一个超链接指向那个固定的文件的。那这就是文件下载的意义所在。OK。下面我们来看在r two里面如何进行文件的下载,那r two专门提供了下载的一个结果类型叫stream。
01:10
在使用一个STEM结果的时候呢,我们不必再使用这个JSP,一言以蔽之。图里边文件下载的话,就使用type等于stream这个result就可以了。笔记。文件的下载。图中。使用。APP等于。Stream。Result进行。下载。T。
02:01
下载。宪法任务是什么呀?我们就来学习如何来用。Map等于stream的这个result不就行了吗?打开我们的trut default。那我们在前面讲这个结果类型的时候呢,我们讲过。嗯,这个result type里边有chainpartrect跟direct action这四个结果类型我们都已经讲过了,当时我们讲就讲到是吧,有一个接口类型叫stream,这个就是在文件下载的时候使用。看stra two的文档。打开。Dogs。Dogs home。找到ice。Tax。
03:02
OK,结果类型我们找到。Stream result。那关于文件下载的全部内容呢?呃,关于stream result全部内容呢,全在这,也说明关于文件下载的全部内容也全在这。那我们看一下吧。我们就可以使用这个stream result进行文件的下载,它可以指定这样的一些参数,后边的话呢,还给提供了一个例子。OK not。具体。使用细节看看。给滚打。我们说一下吧。我们看到这里面主要的是什么呀,主要的就是我们可以为type等于stream这个result来设定一些参数,这些参数比较关键。
04:05
参数复制过来。得以为stream的result。设定如下参数。就是英文好的同学的话,你就可以直接搞定了是吧,第一个结果类型。第二个加载文件的长度。实际上是什么呀,实际上是设定。
05:03
On。Ha。Per。监控。摄像头。指定响应。是一个。文件下载类型对吧,一般取值为。会怎么样?尤其啊是这样的。这一个部件同时的话呢,再提供一个文件名。和input stream。这个是。
06:00
我们在进行文件下载的时候的话呢,我们需要在action里边提供一个输入流,对吧,输入把那个文件读进来,然后rus帮我们读出。这个呢,就是指定文件输入,比如他。定义的那个属性的名字默认为。默认为string吧。好,二缓存区的大小。缓存的大小默认为1024对吧。你看。缓存大小默认为1024,这个是是否允许使用缓存。
07:11
是否允许使用缓存?下一个。指定下载的字符集。指定下载的字符几位?这些就是result这个被射者参数。好吧,下边还有非常重要的一点。在我们什么呀,在我们这块的这行小字里面说这些参数实际上可以在。A里面以get方法的方式提供。非常关键哈。来以上。单数可以在。
08:01
Action中,E。方法的方式提供。这样的话是什么呢?这样的话呢,说明这些参数就是活的,而且死的。比方说这个文件的类型,这个文件的长度,我怎么能够确定啊。那这个时候你就可以在X里边提供一个对应的get方法,不就可以了吗?看一个文件的下载。JSPJSP。Crave。Get down。On。Down。
09:02
我需要去指定一个action。Onlo action。Extend action。提供一个Q的方法。没问题。配置一下。文件的下载。Action。这个名呢,叫。Those other。打开east download。Glass。放了我的action。
10:03
Con z。提供一个b type是。Stream类型是吧。而且他可以指定N多张。参数啊,有一些参数的话呢,我们可以写四有一些参数我们需要动态的提供看一眼。看我这个笔记吧。我们看哎,有这么一些参数,比方说前边的这三个参数呢,我们需要动态的提供。三个动态提供,而这个我们可以举目认知。我们可以写死。二零。四八。行,OK。好了,还有什么呢?是不是允许使用缓存?
11:03
是处吧?问,认知是柱,所以说我们就可以不指定了,Content set我们也使用默认值,那这两个的话呢,我们就不设置了哈。回来好了,下边的话呢,最主要的是。前三个,哎,还有。还有第四个,最主要是前四个。Content type,我来写一个吧。提供一个钙的方法。Content。艾方type,我对应的话呢,我也应该提供一个平均变量吧,为什么呀,因为确定这个。结果类型确定这个长度是不是我们调这个方法的时候才能够确定啊。
12:00
是吧,所以说我写这样的。一个成因变量。Rave。Stra content type,一个private。来看一眼这个什么呀,Content长度。这个长度的话呢,可以设置为浪细胞。Vive要一个什么?还有一个是contentposition。最经的。好了,我提供对应的三个get方法。还有一个,我们还需要提供一个输默认,这个名叫input stream,提供一个输入流默认叫input stream。
13:07
Private input input OK。Bad input stream。这个的话呢,访问它就可以了哦,一个一个盖的方法这里边啊。确定。各个成圆变量的值对吧,就是说我只有在调这个方法的时候,我才知道。我下载文件的方方面面的信息。对吧,好了,那我现在的话呢,我提供一个文件,这个文件呢,我放在这个files里面。比方说这个文件就是这个吧,还点HTML。
14:04
哎,我让你下载这样一个文件,OK,那于是我来写一下吧。什么类型啊,啊天苗类型。就是这样一个类型,但是这个是要下载的哈,而不是直接打开。Content。这个曲子叫the attachment。File name等于。等于谁啊?你名叫它,但我这个文件的话呢,实际上是固定的,我们开发的时候有可能需要动态生成一个文件。下一个。还需要指定input stream。那这个的话呢,需要我具体去读这个文件吧,New input stream input。
15:02
我需要。知道这个路径file name等于。啊。OK,还有一个。Length等于input stream点。为了不不定。我需要去读这个文件,那我就需要确定这个文件的目录,所以说我们需要用到contact等于action。Action and。下来。搞一下context.get real parts。登录下files下边的。HTML。
16:00
写完了。Return to success。哦。找一个看看效果。复制我们使用IE。宝。打开。干什么呀,是不是在起,是不是在起这个迅雷呀。看一眼,等一下大家看。哦,我不需要干什么呀,我不需要去写这个。单引号吧,过来看一眼,不需要写这个单引号,直接指定就可以了。
17:05
哦。不。关掉。再来。啊,这块的话呢,当您取消的时候,这块也会让我确定是不是需要保存我取消。再点一次。关掉,不要。这块的话,他会告诉我是不是下载保存。我应该另存为是吧。现在的话呢,正在扫描,然后打开文件夹。打开。这个就是那个黑的整个这就是文件的下载。复习一下。这个文件的下载呢,我们完全是基于这个stream,这个结果类型,那这个细节我们可以参看r to给我们提供的文档,那它可以来设置这样的一些参数,其中那前四个参数,呃,前三个参数是需要动态指定的,而这个不需要动态指定,叫input stream。这是我们。
18:20
输入流的名字啥意思啊?默认值是input stream,我需要在这块。提供一个get input这种方法,这是那个输入流,而我们这块这个名叫啥叫input name是吧,我们可以把这个是改为in,这要是in的话,这块就应该提供这个方法,就叫get in,但它返回的一定是一个输入流,把这个输入流读到我们的这个X里边以后输出的事儿。不用你管这个的话呢,抓图已经帮我们完成了。前几个啊,我们刚才我们都已经说清楚了,我们在开发的时候,我们通常情况下,呃,只需要写这样的四个成序变量,提供对应的get方法,然后确定每个成员变量的话,一定是在我这个Q方法里边来确定的。
19:13
因为我只有具体进行下载的时候,我才知道这个文件名是什么。这个文件的类型是什么,这个文件的大小是什么样的,这个文件如何确定这个文件的输入流对吧。再回来那。后几个参数的话呢,用的会少一些,我们也可以来进行这个指定,我们来看一下我们这个tru.x键这边怎么办的呀。就是告诉你用这个结果类型,同时我们还指定了一个参数。OK。
我来说两句