简单文件上传工具类

使用org.apache.commons.fileupload.servlet.ServletFileUpload上传文件:
* 创建FileUploadUtil工具类
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class FileUploadUtil{
private ServletFileUpload servletFileUpload;
private String filePath;//文件保存路径
private int fileIndex=0;
private long singleSizeMax = 2*1024*1024;//上传单个文件大小上额2M
private long sizeMax = 20*1024*1024;//总上传大小上额 20M
private List<FileBean> fileList;//解析后的需要保存的文件集合
private List upFileList;//上传的文件集合
private String fileNameStart = "";
private Map<String,Object> paramMap = new HashMap<String,Object>();
private HttpServletRequest request;

/**
* 重置相关信息
*/
public void refresh() throws Exception{
this.fileList = new ArrayList();
this.paramMap.clear();
this.fileIndex = 0;
this.fileNameStart = "";
}
/**
* 初始化
*/
public void init(HttpServletRequest request) throws Exception{
this.refresh();
this.servletFileUpload.setSizeMax(this.sizeMax);
fileList = new ArrayList<FileBean>();
this.upFileList = new ArrayList();
//解析request中相关信息
List<FileItem> fileItemList = this.servletFileUpload.parseRequest(this.request);
Iterator iterator = fileItemList.iterator();
while(iterator.hasNext()){
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
//是字段
this.processFormField(item);
}else{
//是file
this.upFileList.add(item);
}
}
}
/**
* 解析普通表单字段
*/
public void processFormField(FileItem item){
try{
String filedName=item.getFieldName().trim().toUpperCase();
String filedValue=item.getString(this.getServletFileUpload().getHeaderEncoding());
if(paramMap.get(filedName)!=null){
paramMap.put(filedName,paramMap.get(filedName)+","+filedValue);
}else{
paramMap.put(filedName,filedValue);
}

}catch(Exception ex){
//解析普通表单字段出错
}
}
/**
* 取上傳文件的原始文件名稱(含後綴)
* @param pathName
* @return
*/
public String getUploadFileName(String pathName){
int startIndex = pathName.lastIndexOf("\\");
if(startIndex<0) startIndex=0;
int endIndex = pathName.length();
return pathName.substring(startIndex+1,endIndex);
}
/**
* 生成不重複的保存文件名
* @param pathName
* @return
*/
public String getSaveFileName(String pathName){
fileIndex++;
java.util.Date date=new java.util.Date();
java.text.DateFormat ft = new java.text.SimpleDateFormat("yyyyMMddHHmmssSSS");
String dateStr = ft.format(date);
return this.getFileNameStart()+dateStr+"_"+String.valueOf(fileIndex)+"."+IoUtils.getFileType(pathName);
}
/**
* 解析上传的文件
* @param pathName
* @return
*/
public FileBean processUploadedFile(FileItem item) throws Exception{
String fileName = getUploadFileName(item.getName());
String newName = getSaveFileName(item.getName());
String fileType = IoUtils.getFileType(item.getName());
File newFile = new File(this.filePath + newName);
item.write(newFile);
FileBean fileBean = new FileBean();
fileBean.setFileName(fileName);
fileBean.setFileSize(item.getSize());
fileBean.setFileType(fileType);
fileBean.setContentType(item.getContentType());
fileBean.setPathName(newName);
fileBean.setFieldName(item.getFieldName());
return fileBean;
}
/**
* 數據回滾
* @throws java.lang.Exception
*/
public void rollBack()throws Exception{
this.delete(fileList);
this.fileList = null;
this.upFileList=null;
}
/**
* 刪除文件
* @param filePath
* @throws java.lang.Exception
*/
public void delete(String filePath) throws Exception{
IoUtils.deleteFile(this.filePath+filePath);
}
/**
* 刪除文件
* @param fileList
* @throws java.lang.Exception
*/
public void delete(List fileList) throws Exception{
String fileNames="";
if(fileList!=null && fileList.size()>0){
for(int i=0;i<fileList.size();i++){
FileBean file = (FileBean)fileList.get(i);
fileNames += filePath+file.getPathName()+",";
}
IoUtils.deleteFile(fileNames);
}
}

//取值的一些方法

/**
* 取字段值
* @param name
* @return
*/
public String getParameter(String name){
if(paramMap.get(name.toUpperCase())!=null){
return (String) paramMap.get(name.toUpperCase());
}else{
return null;
}

}
/**
* 提取所有上传的文件
* @author : qinzhanxing
* @date : Nov 13, 2009 3:27:07 PM
* @return
*/
public List<FileBean> getFiles(){
return fileList;
}
/**
* 批量文件保存(按字段名分組)
* @param nameStartsWith 
* @param rollBack 當某個文件出錯是否回滾(刪除所有已經上傳的文件,竎throws Exception)
* @return list+FileBean
* @throws java.lang.Exception
*/
public List<FileBean> getFilesByName(String nameStartsWith,boolean rollBack)throws Exception{
//filePath = request.getContextPath()+filePath;
this.save(rollBack);
nameStartsWith = nameStartsWith.trim();
List namefileList = new ArrayList();
for(FileBean file:fileList){
String fieldName = file.getFieldName().trim();
log.debug("fieldName="+fieldName);
if(fieldName.startsWith(nameStartsWith)){
namefileList.add(file);
}
}
return namefileList;
}
}
* 使用实例:
FileUploadUtil fuTool = new FileUploadUtil();
fuTool.setServletFileUpload(this.getServletFileUpload());
fuTool.setSizeMax(this.getFileMaxSize());
fuTool.setFilePath(this.getFilePath());
fuTool.init(request);
fuTool.save(true);

String parameterValue = fuTool.getParameter("parameterName");
for(FileBean file : fuTool.getFiles()){

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值