NO | 方法 | 类型 | 描述 |
---|---|---|---|
01 | public ParameterUtil(HttpServletRequest request) | 构造 | 采用默认上传参数处理用户请求 |
02 | public ParameterUtil(HttpServletRequest request,String upload_path) | 构造 | 处理用户请求并设置上传目录 |
03 | public PrameterUtil(HttpServletRequest request,String upload_path,String temp_path,long max_size,long file_max_size,String defaultEncoding) | 构造 | 处理用户请求并配置上传参数 |
05 | public String getParameter(String paramName) | 方法 | 获取指定参数的内容 |
06 | public String[] getParameterValues(String paramName) | 方法 | 获取指定参数名称对应的一组内容 |
07 | public Set<String> getParameterNames() | 方法 | 获取全部上传参数名称 |
08 | public Map<String,String[]> getParameterMap() | 方法 | 获取全部上传参与与数据 |
09 | public List<String> getUploadName(String paramName) | 方法 | 根据参数名称获取文件保存名称 |
10 | public void saveUploadFile(String paramName,List<String> uploadFileNames) | 方法 | 实现指定上传文件参数的文件保存 |
11 | public void clean() | 方法 | 清除本次请求的临时文件 |
工具类代码:
package cn.commons.util;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.util.*;
public class ParameterUtil {
/**
* 常量
* */
private static final long MAX_SIZE = 3145728L;
private static final long FILE_MAX_SIZE = 1048576L;
private static final String DEFAULT_ENCODING = "UTF-8";
private static final String TEMP_DIR = "/temp/";
private static final String UPLOAD_DIR = "/upload/";
/**
* 属性
*/
private HttpServletRequest request;
private String temp_dir;
private String upload_dir;
private String defaultEncoding;
private long max_size;
private long file_max_size;//用于保存封装后的参数集合,
// key=参数名称 value=参数值 如果是文件的话,value保存文件路径名称
private Map<String, String[]> paramMap = new HashMap<>();
//存储临时文件名称
private List<String> tempFileNames = new ArrayList<>();
//记录目前请求是否封装
private boolean isMultipartContent = false;
private ServletFileUpload fileUpload;
public ParameterUtil(HttpServletRequest request) {
this(request, TEMP_DIR, UPLOAD_DIR, DEFAULT_ENCODING, MAX_SIZE, FILE_MAX_SIZE);
}
public ParameterUtil(HttpServletRequest request, String upload_dir) {
this(request, TEMP_DIR, upload_dir, DEFAULT_ENCODING, MAX_SIZE, FILE_MAX_SIZE);
}
public ParameterUtil(HttpServletRequest request, String temp_dir, String upload_dir, String defaultEncoding, long max_size, long file_max_size) {
if (!temp_dir.startsWith("/")) {
this.temp_dir = "/" + temp_dir;
}else
if (!temp_dir.endsWith("/")) {
this.temp_dir = temp_dir + "/";
}else
{
this.temp_dir = temp_dir;
}
if (!upload_dir.startsWith("/")) {
this.upload_dir = "/" + upload_dir;
}else
if (!upload_dir.endsWith("/")) {
this.upload_dir = upload_dir + "/";
}else
{
this.upload_dir = upload_dir;
}
this.request = request;
this.defaultEncoding = defaultEncoding;
this.max_size = max_size;
this.file_max_size = file_max_size;
handleParameter();
}
//处理参数
private void handleParameter() {
if (request.getContentType() == null)//直接返回不封装处理的请求,
{
this.isMultipartContent = false;
return;
}
this.isMultipartContent = true;
DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
fileItemFactory.setRepository(new File(TEMP_DIR));
fileItemFactory.setDefaultCharset(defaultEncoding);
this.fileUpload = new ServletFileUpload(fileItemFactory);
this.fileUpload.setFileSizeMax(file_max_size);
this.fileUpload.setSizeMax(max_size);
this.fileUpload.setHeaderEncoding(defaultEncoding);
try {
if (this.fileUpload.isMultipartContent(this.request)) {
Map<String, List<FileItem>> map = this.fileUpload.parseParameterMap(this.request);
for (Map.Entry<String, List<FileItem>> entry : map.entrySet()) {
String paramName = entry.getKey();
String paramValues[] = new String[entry.getValue().size()];
int foot = 0;
for (FileItem item : entry.getValue()) {
if (item.isFormField())//文本类型
{
paramValues[foot++] = item.getString(defaultEncoding);
} else//文件类型
{
//paramValues[]存储文件路径,this.tempFileNames存储临时文件名称
String paramFileName = createTempFile(item);
this.tempFileNames.add(paramFileName);
paramValues[foot++] = paramFileName;
}
}
this.paramMap.put(paramName, paramValues);
}
}
} catch (Exception e) {
}
}
/**
* 根据fileItem创建临时文件,并返回临时文件名称
*/
private String createTempFile(FileItem item) {
if (item.getSize() > 0)//判断文件是否真实合法
{
try {
String fileName = "temp."+getUUIDName(item.getContentType());
String filePath = request.getServletContext().getRealPath(this.temp_dir) + fileName;
item.write(new File(filePath));
item.delete();
return fileName;
} catch (Exception e) {
}
}
return null;
}
/**
* 获取临时文件名称集
* */
public List<String> getTempFileNames() {
return tempFileNames;
}
/**
* 根据fileItem的ContentType后缀 返回文件唯一命名
*/
private String getUUIDName(String ContentType) {
return UUID.randomUUID() + "." + ContentType.substring(ContentType.lastIndexOf("/") + 1);
}
/**
* 根据指定参数名称获取单个值内容,如果是表单数据则取出文件的名称
*/
public String getParameter(String paraName) {
if (this.isMultipartContent)//如果封装的话 从map取出数据匹配的第一个数据
{
return paramMap.get(paraName)[0];
} else {
return this.request.getParameter(paraName);
}
}
/**
* 根据指定参数名称获取一组数据
*/
public String[] getParameterValues(String paraName) {
if (this.isMultipartContent) {
return this.paramMap.get(paraName);
} else {
return request.getParameterValues(paraName);
}
}
/**
* 获取全部参数名称
*/
public Set<String> getParameterNames() {
if (this.isMultipartContent) {
return this.paramMap.keySet();
} else {
return request.getParameterMap().keySet();
}
}
/**
* 返回全部参数名称及内容
*/
public Map<String, String[]> getParameterMap() {
if (this.isMultipartContent) {
return this.paramMap;
} else {
return request.getParameterMap();
}
}
/**
* 根据指定参数名称,返回文件存储名称
**/
public List<String> getUploadNames(String paramName) {
List<String> uploadNames = new ArrayList<>();//保存真实路径名称
String tempNames[] = this.paramMap.get(paramName);
for (String tempName : tempNames) {
uploadNames.add(UUID.randomUUID() + "." + tempName.substring(tempName.lastIndexOf(".") + 1));
}
return uploadNames;
}
/**
* 实现指定参数名称的文件保存,将临时文件转存到真实路径下
* paraName:参数名称
* uploadNames:真实路径名称集合
*/
public void saveUploadFile(String paraName, List<String> uploadNames) {
String[] tempName = this.paramMap.get(paraName);
for (int i = 0; i < tempName.length; i++) {
try {
InputStream inputStream = new FileInputStream(new File(request.getServletContext().getRealPath(this.temp_dir) + tempName[i]));
OutputStream outputStream = new FileOutputStream(new File(request.getServletContext().getRealPath(this.upload_dir) + uploadNames.get(i)));
int tempByte = 0;
byte[] data = new byte[1024];
while ((tempByte = inputStream.read(data)) != -1) {
outputStream.write(data, 0, tempByte);
}
inputStream.close();
outputStream.close();
} catch (Exception e) {
}
}
}
/**
* 清空本次临时文件
*/
public void clean() {
if (this.tempFileNames.size() > 0) {
for (String tempName : this.tempFileNames) {
File file = new File(request.getServletContext().getRealPath(this.temp_dir) + tempName);
if (file.exists()) {
file.delete();
}
}
}
}
}