上传文件工具类
依赖:
commons-logging
commons-io
commons-fileupload
代码:
/*
* UploadUtil.java
* @author dawn.liu 2011-9-17
* @version 1.0
* Copyright (c) 2011-2012, dawn.liu. All rights reserved.
*/
package com.lyjilu.util;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* @author dawn.liu 2011-9-17 Copyright (c) 2011-2012, dawn.liu All rights reserved.
* @version 1.0
* 上传处理工具类,主要处理request请求,封装request信息等
*
*/
public class UploadUtil {
private static Log log = LogFactory.getLog(UploadUtil.class);
/**
* 默认临时存储目录
*/
public static String TEMPREPOSITORY = System.getProperty("java.io.tmpdir");
/**
* 在内存中的最大限度
*/
public static int SIZETHRESHOLD = 1000000;
/**
* 最大上传文件大小
*/
public static int SIZEMAX = 5024000;
/**
* 变量,永远在request.setAttribute的时候的键,方便统一取值
*/
public String reqattributename = "__UploadFile";
/**
* 默认构造,
*/
public UploadUtil() {
}
/**
* 设置放到requestattr里时的key变量
*
* @param reqattributename
* 变量
*/
public void setReqattributename(String reqattributename) {
this.reqattributename = reqattributename;
}
/**
* 设置默认存放路径
*
* @param temprepository
* 路径
*/
public UploadUtil(String temprepository) {
this(temprepository, 0, 0);
}
/**
* 构造,设置在内存中的最大限度
*
* @param sizethreshold
* 在内存中的最大限度
*/
public UploadUtil(int sizethreshold) {
this(null, sizethreshold, 0);
}
/**
* 设置各个上传限制参赛
*
* @param temprepository
* 临时目录
* @param sizethreshold
* 内存最大限度
* @param sizemax
* 最大上传文件
*/
public UploadUtil(String temprepository, int sizethreshold, int sizemax) {
if (temprepository != null && !"".equals(temprepository))
TEMPREPOSITORY = temprepository;
if (sizethreshold > 0 && sizethreshold < Integer.MAX_VALUE)
SIZETHRESHOLD = sizethreshold;
if (sizemax > 0 && sizemax < Integer.MAX_VALUE)
SIZEMAX = sizethreshold;
}
/**
* 上传文件集合
*/
private Map<String, FileItem> files = new HashMap<String, FileItem>();
/**
* 文本域数据集合
*/
private Map<String, Object> fields = new HashMap<String, Object>();
public Map<String, FileItem> getFiles() {
return files;
}
public void setFiles(Map<String, FileItem> files) {
this.files = files;
}
public Map<String, Object> getFields() {
return fields;
}
public void setFields(Map<String, Object> fields) {
this.fields = fields;
}
/**
*
* 处理request,封装表单和上传的文件
*
* @param request
* @throws Exception
*/
@SuppressWarnings("unchecked")
public void parseRequest(HttpServletRequest request) throws Exception {
request.setCharacterEncoding("UTF-8");
// 判断是否为上传
if (ServletFileUpload.isMultipartContent(request)) {
// 初始一个DiskFileItemFactory
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置临时存放目录
File file = new File(TEMPREPOSITORY);
if (!file.exists() || !file.isDirectory()) {
file.mkdirs();
}
factory.setRepository(file);
// 设置在内存中的最大限度
factory.setSizeThreshold(SIZETHRESHOLD);
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置最大上传文件大小
upload.setSizeMax(SIZEMAX);
List<FileItem> items = null;
try {
// 格式化
items = upload.parseRequest(request);
} catch (Exception e) {
log.debug("上传文件格式化request错误", e);
e.printStackTrace();
if (e instanceof SizeLimitExceededException) {
throw new Exception("ERROR:上传文件过大,文件最大:" + SIZEMAX / 1024
+ "KB");
} else {
throw new Exception("格式化请求错误" + e.getMessage());
}
}
// 取得item的迭代对象
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
String fieldName = new String(item.getFieldName().getBytes(
"ISO-8859-1"), "UTF-8");
String fieldValue = new String(item.getString().getBytes(
"ISO-8859-1"), "UTF-8");
if (fields.containsKey(fieldName)) {
Object obj = fields.get(fieldName);
if (obj instanceof List) {
List<Object> ob = (List<Object>) obj;
ob.add(fieldValue);
} else {
List<Object> list = new ArrayList<Object>();
list.add(obj);
list.add(fieldValue);
fields.remove(fieldName);
fields.put(fieldName, list);
}
} else
fields.put(fieldName, fieldValue);
} else if (item.get() != null && item.get().length > 0) {
files.put(item.getFieldName(), item);
}
}
request.setAttribute(reqattributename, this);
} else {
log.debug("上传文件ERROR:该请求不是上传文件");
throw new Exception("ERROR:该请求不是上传文件 ");
}
}
}servlet中用法
UploadUtil upbase = new UploadUtil();
try {
upbase.parseRequest(request);
} catch (Exception e) {
e.printStackTrace();
}
doSomething1(upbase); 相关推荐
Kafka 2020-09-18
Wepe0 2020-10-30
windle 2020-10-29
mengzuchao 2020-10-22
Junzizhiai 2020-10-10
bxqybxqy 2020-09-30
风之沙城 2020-09-24
kingszelda 2020-09-22
大唐帝国前营 2020-08-18
yixu0 2020-08-17
TangCuYu 2020-08-15
xiaoboliu00 2020-08-15
songshijiazuaa 2020-08-15
xclxcl 2020-08-03
zmzmmf 2020-08-03
newfarhui 2020-08-03
likesyour 2020-08-01