请同学们先浏览PPT,这是一个任务点哈!完成后有惊喜哟!

1.Commons-FileUpload组件简介
随着Internet的普及,网络共享逐渐成为了广大网民传递信息、共享资源的一种常用方式,不管是社交软件中用户将计算机中或者手机中的文件上传至服务器以便他人浏览、欣赏,还是电商网站/软件中商家上传商品图片,都涉及到文件上传实现文件上传,最底层还是对文件的读写操作,在以前实现起来要编写大量的代码,而且容易引发各式各样的异常。幸运的是现在有好多很实用的上传工具,可以帮助我们实现这些功能,而目前应用的比较多的,就是Commons-FileUpload组件。
2.应用Commons-FileUpload组件完成文件上传
进行文件上传时,必须首先了解上传表单的enctype属性,该属性用于设置表单提交数据的编码方式。它有以下3个值:
application/x-www-form-urlencoded:这是默认值。主要用于处理少量文本数据的传递。在向服务器发送大量的文本包含非ASCII字符的文本或二进制数据时这种编码方式效率很低。
multipart/form-data:上传二进制数据,只有使用了multipart/form-data,才能完整的传递文件数据,进行上传的操作。
text/plain:这种方式主要用于向服务器传递大量文本数据。比较适用于电子邮件的应用。
ServletFileUpload类,主要用于解析form表单提交的数据、设置请求信息实体内容的最大允许字节数,常用方法见表:
| 序号 | 方法名称 | 方法描述 |
| 1 | void setSizeMax(long sizeMax) | 设置请求信息内容的最大允许字节数 |
| 2 | List parseRequest(HttpServletRequest request) | 解析form表单提交的数据返回一个FileItem实例的集合 |
| 3 | static final boolean isMultipartContent(HttpServletRequest request) | 判断请求提交的方式是否是“multipart/form-data”类型 |
| 4 | void setHeaderEncoding(String encoding) | 设置转换时所使用的字符集编码 |
FileItem接口,用于封装单个表单字段元素的数据,每一个表单字段都对应一个FileItem实例,在应用程序中使用的是其实现类DiskFileItem。FileItem接口提供的常用方法见表
| 序号 | 方法名称 | 方法描述 |
| 1 | public boolean isFormField() | 判断FileItem对象所封装的数据类型,普通表单字段返回true,文件表单字段返回false |
| 2 | public String getName() | 获得文件字段中所上传的文件名,普通表单字段调用此方法返回null |
| 3 | public StringgetFieldName() | 返回表单字段元素的name属性值 |
| 4 | public void write(File file) | 将FileItem对象中保存的文件数据内容写入到指定的文件中 |
| 5 | public String getString() | 将FileItem对象中保存的主体内容以一个字符串返回,其有一个重载方法getString(Stringencoding),可指定所采用的编码集 |
| 6 | public long getSize() | 返回单个上传文件的字节数 |
FileItemFactory接口与其实现类DiskFileItemFactory,创建ServletFileUpload实例需要依赖FileItemFactory工厂接口,DiskFileItemFactory是此接口的实现类,主要有两个常用方法见表:
| 序号 | 方法名称 | 方法描述 |
| 1 | public void setSizeThreshold(intsizeThreshold) | 设置内存缓冲区的大小 |
| 2 | pubic void setRepositoryPath(String path) | 设置临时文件存放的目录 |
3.文件下载
进行文件下载时首先需要确定该文件在服务器的位置,然后在页面中以链接形式发送下载请求,并在Servlet类中使用I/O流处理下载,将所下载的文件流作为响应返回即可。
(1)创建页面“index.jsp”,该页面给出下载列表,并通过getServletContext().getRealPath()方法得到每个下载文件的路径,同时通过下载链接发送下载
(2)该页面中每个下载链接都发送请求down.do,该请求在web.xml文件中配置:
(3)创建Servlet类Download.java,该类中的doPost方法处理下载请求,并使用输出流输出响应


