首先,要使用“commons-fileupload”,必需有“commons-io”包。
import java.io.File;
import java.io.UnsupportedEncodingException;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class Request {
private Map parameters;// 保存普通form表单域
private Map fileMap;// 保存文件
private String encoding = "GBK"; // 字符编码,当读取上传表单的各部分时会用到该encoding
private long sizeMax = -1;
private long filesSize = 0; // 所有文件的总大小
/**
* @param request
* @throws UnsupportedEncodingException
*/
public Request(HttpServletRequest request)
throws UnsupportedEncodingException {
this.parameters = new HashMap();
this.fileMap = new HashMap();
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding(this.encoding);
try {
List items = upload.parseRequest(request);
for (int i = 0; i < items.size(); i++) {
FileItem item = (FileItem) items.get(i);
if (item.isFormField()) {
String fieldName = item.getFieldName();
String value = item.getString(this.encoding);
if (this.parameters.containsKey(fieldName)) {
String value1 = (String) this.parameters.get(fieldName);
this.parameters.put(fieldName, value1.replace(',', ',')
+ "," + value.replace(',', ','));
} else
this.parameters.put(fieldName, value);
} else {
if (!isValidFile(item))
continue;
this.fileMap.put(item.getFieldName(), item);
this.filesSize += item.getSize();
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}
/**
* 上传文件
* @param field 字段名
* @param path 完整文件路径
* @throws Exception
*/
public void save(String field, String path) throws Exception {
if (this.fileMap.isEmpty())
return;
if (this.sizeMax > -1 && this.filesSize > this.sizeMax) {
String message = "the request was rejected because its size "
+ this.filesSize + " exceeds the configured maximum "
+ this.sizeMax;
throw new org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException(
message, this.filesSize, this.sizeMax);
}
Iterator iter = this.fileMap.keySet().iterator();
while (iter.hasNext()) {
Object key = iter.next();
FileItem item = (FileItem) this.fileMap.get(key);
if (key.equals(field))
item.write(new File(path));
}
}
public String getParameter(String key) {
return (String) this.parameters.get(key);
}
public FileItem getFile(String key) {
return (FileItem) this.fileMap.get(key);
}
/**
* 验证文件是否有效
* @param item
* @return
*/
private boolean isValidFile(FileItem item) {
return item == null || item.getName() == "" || item.getSize() == 0 ? false
: true;
}
}