支持多文件上传
所需jar包
1. commons-FileUpload 1.2 包
2. commons-IO 1.3.1 包
3. Commons-BeanUtils 1.8 包
-----------------------------------upload.jsp-----------------------------------
<html>
<head>
<title>Jsp+Servlet upload file</title>
</head>
<body>
<form action="uploadServlet" method="POST" enctype="multipart/form-data">
<input type ="file" name="file1"/><br/>
<input type ="file" name="file2"/><br/>
<input type="submit" value="Submit" /><br/>
<input type="reset" />
</form>
</body>
</html>
--------------------------------------uploadServlet.java--------------------------------
package lee.util;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
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;
/**
* <p>Title:文件上传(支持多文件上传)</p>
* <p>Description>:FileUpLoad.java</p>
* <p>Create Time:Nov 3, 2010 3:22:21 PM</p>
* <p>@version: 5.0</p>
* <p>@author: LiWeichao</p>
*/
public class UploadServlet extends HttpServlet {
private static final Log log = LogFactory.getLog(UploadServlet.class);
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
try {
String fileName="";//上传到服务器的文件名
String savePath = this.getServletContext().getRealPath("/")+"UploadFiles\\";
File saveDir = new File(savePath);
if(!saveDir.isDirectory())//目录不存在则创建相应目录
saveDir.mkdir();
if (ServletFileUpload.isMultipartContent(request)) {
DiskFileItemFactory dff = new DiskFileItemFactory();// 创建该对象
dff.setSizeThreshold(1024000);// 指定在内存中缓存数据大小,单位为byte
ServletFileUpload sfu = new ServletFileUpload(dff);// 创建该对象
sfu.setFileSizeMax(5000000);// 指定单个上传文件的最大尺寸(单个文件大小不超过5M)
sfu.setSizeMax(20000000);// 指定一次上传多个文件的总尺寸(总文件大小不超过20M)
FileItemIterator fii = sfu.getItemIterator(request);// 解析request
// 请求,并返回FileItemIterator集合
while (fii.hasNext()) {
FileItemStream fis = fii.next();// 从集合中获得一个文件流
if (!fis.isFormField() && fis.getName().length() > 0) {// 过滤掉表单中非文件域
// 根据系统时间生成上传文件的文件名 避免重复和中文乱码
fileName = fis.getName().trim();
fileName=System.currentTimeMillis()+fileName.substring(fileName.lastIndexOf("."));
//获取文件写入流
InputStream stream=fis.openStream();
//创建输出流
OutputStream bos=new FileOutputStream(savePath+fileName);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = stream.read(buffer, 0, 8192)) != -1){
bos.write(buffer, 0, bytesRead);//将文件写入服务器
}
bos.close();
stream.close();
}
}
response.getWriter().println("File upload successfully!!!");// 终于成功了,还不到你的上传文件中看看,你要的东西都到齐了吗
}
} catch (Exception e) {
log.error("#ERROR#:上传附件发生错误,请检查!",e);
e.printStackTrace();
}
}
}
-----------------------------------web.xml-----------------------------------
<servlet>
<servlet-name>uploadServlet</servlet-name>
<servlet-class>lee.util.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>uploadServlet</servlet-name>
<url-pattern>/uploadServlet</url-pattern>
</servlet-mapping>