jsp拦截器上传文件实例



jsp拦截器上传文件实例,判断文件大小,拦截器的配置实例。我们经常要使用到servlet拦截器判断文件类型,编码方式等,以下是具体的源码:

Filter_Upload.java上传文件源码:

package com.cn.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

import com.cn.control.UploadRequestWrapper;

public class Filter_Upload implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {

UploadRequestWrapper uploadRequest = new UploadRequestWrapper((HttpServletRequest)request); // 自定义requset处理文件上传

chain.doFilter(uploadRequest, response); // doFilter,执行下一个Filter或者Servlet
}

public void destroy() {}
public void init(FilterConfig filterConfig) throws ServletException {}

}

UploadRequestWrapper.java源文件:

package com.cn.control;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;

public class UploadRequestWrapper extends HttpServletRequestWrapper {

private static final String MULTIPART_HEADER = “Content-type”; // 设置文件类型头
// 用一个布尔变量判断是否是上传文件
private boolean multipart;
// 声明一个Map对象,用来保存提交的数据
private Map<String, Object> params = new HashMap<String, Object>();

@SuppressWarnings(“all”)
public UploadRequestWrapper(HttpServletRequest request) {
super(request);
// 判断是否为上传文件
multipart = request.getHeader(MULTIPART_HEADER) != null
&& request.getHeader(MULTIPART_HEADER).startsWith(“multipart/form-data”);


if (multipart) { // 判断如果是上传文件
try {
DiskFileUpload upload = new DiskFileUpload(); // 使用apache处理上传
upload.setHeaderEncoding(“utf8″); // 设置编码方式为utf-8
//解析上传的数据,放入List集合对象中
List<FileItem> fileItems = upload.parseRequest(request);
//用Iterator迭代器遍历List集合
for (Iterator<FileItem> it = fileItems.iterator(); it.hasNext();) {

FileItem item = it.next(); // 当前的FileItem

if (item.isFormField()) { // 判断如果FileItem是文本域
//使用Map集合对象保存内容
params.put(item.getFieldName(), item.getString(“utf8″));
} else { // 否则为文件域
//使用replace方法替换特殊字符
String filename = item.getName().replace(“\\”, “/”);
filename = filename.substring(filename.lastIndexOf(“/”) + 1);

// 保存到系统临时文件夹中
File file = new File(System.getProperty(“java.io.tmpdir”), filename);

OutputStream ous = new FileOutputStream(file); // 新建文件输出流
ous.write(item.get()); // 输出到文件中
ous.close(); // 关闭文件流

params.put(item.getFieldName(), file); // 把数据放到map集合中
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public Object getAttribute(String name) {

// 如果为上传文件,则从map中取值。支持直接获取文件对象
if (multipart && params.containsKey(name)) {
return params.get(name);
}
return super.getAttribute(name);
}

public String getParameter(String name) {

// 如果为上传文件,则从map中取值
if (multipart && params.containsKey(name)) {
return params.get(name).toString();
}
return super.getParameter(name);
}

}

filter_upload.jsp上传文件:

<%@ page language=”java” pageEncoding=”utf-8″%>
<%@page import=”java.io.File”%>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<title>My JSP ‘filter_upload.jsp’ starting page</title>
</head>
<body>
<form action=”" method=”post” enctype=”multipart/form-data”>

<input type=”text” name=”text1″> <%= request.getParameter(“text1″) %> <br/>
<input type=”text” name=”text2″> <%= request.getParameter(“text2″) %> <br/>

<input type=”file” name=”file1″>
<%
File file1 = (File)request.getAttribute(“file1″);
if(file1 != null)
out.println(“<br/>文件: ” + file1 + “, <br/>大小: ” + file1.length());
%> <br/>
<input type=”file” name=”file2″>
<%
File file2 = (File)request.getAttribute(“file2″);
if(file2 != null)
out.println(“<br/>文件: ” + file2 + “, <br/>大小: ” + file2.length());
%> <br/>
<input type=”submit” value=” 上传文件 “>
</form>
</body>
</html>

web.xml文件源码:

<?xml version=”1.0″ encoding=”UTF-8″?>
<web-app version=”2.5″
xmlns=”http://java.sun.com/xml/ns/javaee”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd”>

<filter>
<filter-name>uploadFilter</filter-name>
<filter-class>com.cn.filter.Filter_Upload</filter-class>
</filter>

<filter-mapping>
<filter-name>uploadFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

</web-app>