package com.fei.util;
import java.io.File;
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.ProgressListener;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class FileUploadUtil {
/**
* 文件上传保存路径
*/
private static final String SAVE_FILEPATH = "/fileupload/";
/**
* 文件上传临时保存路径
*/
private static final String SAVE_FILE_TMPPATH = "/fileupload/tmp/";
/**
* 上传文件的最大值M
*/
private static final int MAX_FILE_SIZE = 100*1024*1024;
/**
* 文件数据在内存中超过多少M后,就写入临时文件
*/
private static final int THRESHOLD_SIZE = 2*1024*1024;
private static final String ENCODING = "UTF-8";
/**
* 处理文件上传的表单
* 下载文件,并返回文件名称及普通表单域中其它属性值
* 获取文件名
*/
public static Map<String,String> upload(HttpServletRequest request)throws Exception{
Map<String,String> params = new HashMap<String, String>();
String savePath = request.getSession().getServletContext()
.getRealPath(SAVE_FILEPATH)+ File.separator;
String savePathTemp = request.getSession().getServletContext()
.getRealPath(SAVE_FILE_TMPPATH)+ File.separator;
File saveFileTempDir = new File(savePathTemp);
DiskFileItemFactory factory = new DiskFileItemFactory();
//当内存中文件数据达到THRESHOLD_SIZE后,就写入临时文件中,避免上传大文件时,消化太多内存
factory.setSizeThreshold(THRESHOLD_SIZE);
factory.setRepository(saveFileTempDir);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding(ENCODING);
upload.setSizeMax(MAX_FILE_SIZE);
FileUploadInfo fileUploadInfo = new FileUploadInfo();
upload.setProgressListener(new FileUploadListener(fileUploadInfo));
request.getSession().setAttribute("uploadInfo", fileUploadInfo);
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
int fileNum = 1;
while(iter.hasNext()){
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {//普通表单域
params.put(item.getFieldName(), item.getString());
} else {
String fileName = item.getName().replace("/", "\\");
int i = fileName.lastIndexOf("\\");
fileName = fileName.substring(i+1);
//避免重复
fileName = System.currentTimeMillis() + fileName;
File uploadedFile = new File(savePath + fileName);
item.write(uploadedFile);
params.put("fileName0"+fileNum, fileName);
fileNum ++;
}
}
return params;
}
}
class FileUploadListener implements ProgressListener{
FileUploadInfo fileUploadInfo = null;
public FileUploadListener(FileUploadInfo fileUploadInfo) {
this.fileUploadInfo = fileUploadInfo;
}
@Override
public void update(long uploadSize, long totalSize, int itemNum) {
this.fileUploadInfo.setTotalSize(totalSize);
this.fileUploadInfo.setUploadSize(uploadSize);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
uploadtest.rar (30个子文件)
uploadtest
.settings
org.eclipse.wst.jsdt.ui.superType.name 6B
org.eclipse.wst.common.project.facet.core.xml 252B
org.eclipse.wst.common.component 468B
org.eclipse.wst.jsdt.ui.superType.container 49B
.jsdtscope 500B
org.eclipse.jdt.core.prefs 364B
src
com
fei
servlet
UploadFileProgressServlet.java 1KB
UploadFileServlet.java 1KB
util
FileUploadUtil.java 3KB
FileUploadInfo.java 2KB
.project 2KB
WebRoot
META-INF
MANIFEST.MF 36B
WEB-INF
web.xml 1KB
classes
com
fei
servlet
UploadFileProgressServlet.class 2KB
UploadFileServlet.class 2KB
util
FileUploadListener.class 752B
FileUploadInfo.class 3KB
FileUploadUtil.class 4KB
lib
log4j-1.2.16.jar 470KB
jsf-impl.jar 1.15MB
jsf-api.jar 314KB
commons-io-2.1.jar 159KB
commons-fileupload-1.2.2.jar 58KB
jstl-1.2.jar 405KB
upload.html 3KB
fileupload
tmp
upload2.html 3KB
js
jquery-2.1.1.js 251KB
index.jsp 834B
.mymetadata 303B
.classpath 529B
.myeclipse
共 30 条
- 1
资源评论
- zfy00982016-06-24感谢楼主分享
- 数字笔客2015-01-24值得学习,不错
- littletcw2016-10-24值得学习,不错
- simple_lly2015-05-04值得学习,不错
- ck_123abc2015-02-11不錯的學習資料,謝謝分享
夢_殤
- 粉丝: 346
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功