import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
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;
import org.apache.commons.fileupload.util.Streams;
/**
* 上传工具类
*
* @author alon
*
*/
public class UploadUtil {
/**
* 文件上传
*
* @param request
* @param path
* @param fileNameFirst
* @return
* @throws Exception
*/
public static String uploadFile(HttpServletRequest request, String path,
String fileNameFirst) throws Exception {
File file = new File(path);
if (!file.exists()) {
file.mkdirs();
}
ServletFileUpload sfu = new ServletFileUpload(new DiskFileItemFactory());
sfu.setHeaderEncoding("UTF-8");
List fileList = sfu.parseRequest(request);
String name = "";
String extName = "";
String fileName = "";
for (int i = 0; i < fileList.size(); i++) {
FileItem fi = (FileItem) fileList.get(i);
if (!fi.isFormField()) {
name = fi.getName();
if (name != null && !"".equals(name.trim())) {
if (name.lastIndexOf(".") >= 0) {
extName = name.substring(name.lastIndexOf("."));
}
}
fileName = fileNameFirst + extName;
File saveFile = new File(path + fileName);
fi.write(saveFile);
System.out.println(path + fileName + " 文件上传成功!");
}
}
return fileName;
}
/**
* 多文件上传
*
* @param request
* @param path
* @param fileNameFirst
* @throws Exception
*/
public static void uploadMultiFile(HttpServletRequest request, String path,
String fileNameFirst) throws Exception {
File tempDirPath = new File(path);
if (!tempDirPath.exists()) {
tempDirPath.mkdirs();
}
// 创建磁盘文件工厂
DiskFileItemFactory fac = new DiskFileItemFactory();
// 创建servlet文件上传组件
ServletFileUpload upload = new ServletFileUpload(fac);
// 文件列表
List fileList = null;
// 解析request从而得到前台传过来的文件
fileList = upload.parseRequest(request);
// 保存后的文件名
String imageName = null;
// 便利从前台得到的文件列表
Iterator<FileItem> it = fileList.iterator();
while (it.hasNext()) {
FileItem item = it.next();
// 如果不是普通表单域,当做文件域来处理
if (!item.isFormField()) {
imageName = new Date().getTime() + Math.random() * 10000
+ item.getName();
BufferedInputStream in = new BufferedInputStream(
item.getInputStream());
BufferedOutputStream out = new BufferedOutputStream(
new FileOutputStream(new File(tempDirPath + "\\"
+ imageName)));
Streams.copy(in, out, true);
}
}
}
}