2020-03-31

(一)文件下载的概述


一、什么是文件下载

    文件下载:将服务器上的一个文件,通过流写入到客户端上


二、为什么学习文件下载

    很多应用包含有文件下载的功能

        音乐的下载

        应用的下载


三、文件下载的方式


1、使用超链接的方式实现文件的下载

在超链接

注意:超链接的方式,如果浏览器不能识别这种格式的文件,会提示下载,如果支持该格式的文件,会直接打开(例如压缩文件它不支持,也打不开,就会让你下载,如果是一张图片的话,浏览器是支持的,就会直接在页面上显示了)


2、通过手动编写代码的方式实现文件的下载

设置两个头和一个流

Content-Type:文件的MIME类型

Content-Disposition:浏览器支持该格式的文件时,不直接打开,也提示下载

设置代表该文件的输入流,(因为输出流是固定的,它是由Response去生成的,就是response.getOutputStream())


(二)超链接方式实现文件下载


一、代码实现

二、局限性


如果浏览器支持这个格式的文件就会直接打开,如果不支持这个格式的文件才会提示下载


(三)手动编码的方式实现文件下载


一、文件下载的页面

(四)中文文件的下载


一、中文文件的下载会出现乱码问题


1、不同的浏览器对中文文件的下载,采用的编码是不一样的

IE浏览器采用的是URL编码

Firefox浏览器采用的是Base64编码


2、判断客户端使用的浏览器的类型

User-Agent请求头可以获得客户端浏览器信息


二、代码实现

(五)给定目录下的文件下载


一、案例需求描述

    给定一个目录(这个目录可以是任意盘符下的任意路径,这个路径下有多少级目录、每级目录中有多少个文件都是未知的),将这个路径中的文件显示到页面上,在页面上给每个文件都提供一个响应下载的链接,当点击这个链接的时候,对该文件进行下载


二、案例分析


1、分析过程——树形结构的遍历

(1)树:

有且仅有一个根节点

在根节点下可以有任意个子节点

没有子节点的节点称为叶子节点

(2)树形结构的遍历

广度优先遍历1 2 3 4 5 6 7 8 9 10

广度递归

广度非递归

深度优先遍历1 2 5 10 6 3 7 4 8 9

深度递归

深度非递归

2、队列:FIFO(先进先出)

    创建一个队列

    先将根节点入队

    将根节点出队,遍历根节点下的所有子节点,如果有子节点,再将子节点入队

    依此类推


三、文件列表显示

你可能感兴趣的:(2020-03-31)