Servlet系列学习笔记15 --- Servlet文件上传和下载(二)jspSmartUpload组件

一、jspSmartUpload简介

       jspSmartUpload是由jspSmart开发的一个基于JSP的文件上传与下载的第三方组件。它提供了5个类,包含File、Files、Request、SmartUpload和SmartUploadException。其中SmartUploadException类是一个自定义异常类,这里我们就不介绍这个类。

1、File类

       此File类和java.io.File类,该类在com.jspsmart.upload软件包中。File类用于保存单个上传文件的相关信息,例如上传文件的文件名、文件大小、文件数据等,主要的方法如下:

方法

说明

void saveAs()

该方法用于保存文件

String getFieldName()

获取比当前上传文件所对应的表单项名称

String getFileName()

获取文件的文件名,该值不包含目录

String getFilePathName()

获取文件全名,获取的值是一个包含目录的完整文件名

String getFileExt()

获取文件扩展名,即后缀名

String getContentType()

获取文件MIME类型,例如“text/html”

String getContentString()

获取文件内容

int getSize()

获取文件大小,单位为byte

2、Files类

       Files类表示所有上传文件的集合,通过它可以得到上传文件的数目、大小等信息,主要方法如下:

方法

说明

int getCount()

获取上传文件的数目

File getFile(int index)

获取指定位置处的文件对象

Long getSize()

获取上传文件的总长度

Collection getCollection()

返回所有上传文件对象,以便被其他应用程序引用,

3、Request类

       Request类的功能等同于JSP内置对象的request。之所以提供Request类,是因为对于文件上传的表单,request对象无法获取表单输入域的值,而Reqeust对象却可以获取,主要方法如下:

方法

说明

String getParameter(String name)

获取表单中表单输入域name值

Enumeration getParameterNames()

获取表单中除输入域为file类型以外的所有表单元素名称

String[] getParameterValues(String name)

获取表单中多个名称为name的表单输入域的字符串数组

4、SmartUpload类

       SmartUpload类用于实现文件的上传和下载操作,主要方法如下:

方法

说明

void initialize(PageContext pageContext)

初始化,在使用SmartUpload对象时必须先调用方法,该方法进行了重载。此形式常用于JSP

void initialize(ServletConfig config, HttpServletRequest request, HttpResponse response)

初始化,此形式一般用于Servlet

void upload()

上传文件数据。上传操作一般初始化,再执行

Files getFiles()

获取全部上传的文件

setDeniedFilesList(String deniedFilesList)

禁止上传的文件扩展名,多个扩展名之间用逗号隔开。

int save(StringUri)

将全部上传的文件保存到指定目录中

int save(StringUri,int option)

同上。Opetion为保存选项,它有3个值,分别是SAVE_PHYSICAL、SAVE_VIRTUAL和SAVE_AUTO。第一个指定文件保存在操作系统根目录下,第二个指定文件保存在Web应用程序的根目录下,最后一个表示组件自动选择。

int getSize()

获取上传文件的总长度

void setMaxFileSize(long size)

设置每个上传文件的最大长度

void setMTotalMaxFileSize(long totalSize)

设置允许上传文件的总长度

void downloadFile(String source)

下载文件,source为下载文件的文件名

void downloadFile(String source,String contentType)

下载文件,contentType为文件内容类型(MIME格式的文件类型信息)

void downloadFile(String source, String contentType, String dest)

下载文件,dest是下载的文件另存为的文件名

void downloadFile(String source, String contentType, String dest,int blockSize)

下载文件,blockSize为存储读取的文件数据的字节数组大小,默认为65000

Request getRequest()

返回Request对象

二、文件上传

       在JSP页面中使用表单上传文件,需要对表单设置enctype="multipart/form-data"属性。






       接下来是实现的业务逻辑了,具体代码如下

import java.util.Date;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jspsmart.upload.File;
import com.jspsmart.upload.Files;
import com.jspsmart.upload.Request;
import com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException;
public class UploadServlet extends HttpServlet {
	//声明ServletConfig对象,作为initialize()方法的参数
	ServletConfig config;
	//初始化config对象
	public void init(ServletConfig config){
		this.config = config;
	}
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		request.setCharacterEncoding("UTF-8");
		//【1】实例化一个SmartUpload对象
		SmartUpload su = new SmartUpload();
		//【2】初始化SmartUpload对象
		try{
			su.initialize(config, request, response);
		}catch(ServletException se){
			se.printStackTrace();
		}
		//【3】设置文件上传限制
		su.setAllowedFilesList("jpg,avi,zip,txt");
		//设置单个文件的最大字节数为2MB
		su.setMaxFileSize(1024*1024*2);
		//文件总的最大字节数为10MB
		su.setMaxFileSize(1024*1024*10);
		//【4】使用upload上传文件
		try{
			su.upload();
		}catch(ServletException se){
			se.printStackTrace();
		}catch(IOException ioe){
			ioe.printStackTrace();
		}catch(SmartUploadException sue){
			sue.printStackTrace();
		}
		//【5】保存文件
		//获取当前时间
		String Time = String.valueOf((new Date()).getTime());
		//创建Request对象
		Request req = su.getRequest();
		//获取全部上传文件
		Files files = su.getFiles();
		String extFile,fileName;	//文件后缀名, 文件重命名
		for(int i=0;i

       最终结果如下图所示

三、文件下载

       假设用户从File文件夹中下载一张图片,代码如下:

//声明ServletConfig对象,作为initialize()方法的参数
ServletConfig config;
//初始化config对象
public void init(ServletConfig config){
	this.config = config;
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	//【1】新建SmartUpload对象
	SmartUpload su = new SmartUpload();
	//【2】初始化
	su.initialize(config, request, response);
	//【3】设定contentDisponsition为null禁止浏览器自动打开文件
	su.setContentDisposition(null);
	//【4】下载文件
	try{
		su.downloadFile("G:/upload/wenen.txt");
	}catch(SmartUploadException e){
		e.printStackTrace();
	}
}

 

你可能感兴趣的:(JavaWeb)