文件上传和下载

复习

1、写出JSP的脚本语法
2、写出JSP的三大指令的格式和作用
3、写出JSP的动态包含和静态包含的区别
4、写出JSP的常用内置对象
5、写出EL表达式的格式和作用
6、写出JSTL的常用标签和作用

回顾

1、JSP的脚本语法
2、JSP的指令
3、JSP的内置对象
4、JSP的标签
5、EL表达式
6、JSTL标签库

内容

1、什么是过滤器文件上传
2、文件下载

目标

1、掌握文件上传
2、掌握文件下载

主要教学内容:利用file-upload工具包进行文件上传的处理!

第一章 文件上传

1.1 文件上传三要素
1.2 实现文件上传
1.2.1 项目准备

​ 导入: file-upload的jar包

1.2.2 编写上传页面
 
1.2.3 编写处理代码
 
1.2.4 配置
 
1.3 文件上传细节注意

上述的代码虽然可以成功将文件上传到服务器上面的指定目录当中,但是文件上传功能有许多需要注意的小细节问题,以下列出的几点需要特别注意的

1、为保证服务器安全,上传文件应该放在外界无法直接访问的目录下,比如放于WEB-INF目录下。

2、为防止文件覆盖的现象发生,要为上传文件产生一个唯一的文件名。

3、为防止一个目录下面出现太多文件,要使用hash算法打散存储。

4、要限制上传文件的最大值。

5、要限制上传文件的类型,在收到上传文件名时,判断后缀名是否合法。

最终处理代码改进为:

 

第二章 文件下载

我们要将Web应用系统中的文件资源提供给用户进行下载,首先我们要有一个页面列出上传文件目录下的所有文件,当用户点击文件下载超链接时就进行下载操作,编写一个ListFileServlet,用于列出Web应用系统中所有下载文件

2.1 获取文件列表
 

 这里简单说一下ListFileServlet中listfile方法,listfile方法是用来列出目录下的所有文件的,listfile方法内部用到了递归,在实际开发当中,我们肯定会在数据库创建一张表,里面会存储上传的文件名以及文件的具体存放目录,我们通过查询表就可以知道文件的具体存放目录,是不需要用到递归操作的,这个例子是因为没有使用数据库存储上传的文件名和文件的具体存放位置,而上传文件的存放位置又使用了散列算法打散存放,所以需要用到递归,在递归时,将获取到的文件名存放到从外面传递到listfile方法里面的Map集合当中,这样就可以保证所有的文件都存放在同一个Map集合当中。

2.2 配置

在Web.xml文件中配置ListFileServlet

 
2.3 下载页面

展示下载文件的listfile.jsp页面如下:

 
2.4 实现文件下载

编写一个用于处理文件下载的Servlet,DownLoadServlet的代码如下:

 
2.5 配置
 

作业题

1、完善图书图片的上传和下载功能

面试题

1、文件上传的页面表单必须要设置那些属性