创建一个jsp页面进行测试:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
</script>
</head>
<body>
<form action="FileUploadServlet" method="post" enctype="multipart/form-data">
<input type="file" id='fileUpload' name="fileUpload"/>
<input type="submit" value="上传文件"/>
</form>
</body>
</html>
创建一个servlet处理:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Collection;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
/**
* Servlet implementation class FileUploadServlet
*/
@MultipartConfig
@WebServlet("/FileUploadServlet")
public class FileUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public FileUploadServlet() {
super();
}
@SuppressWarnings("unused")
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取上传文件列表集合
Collection<Part> parts = request.getParts();
for(Part p : parts){
String name = p.getName();//name是获取的前台input type=file的name值。
long size = p.getSize();//size是文件大小。
Collection<String> headerNames = p.getHeaderNames();
/**
* Content-Disposition:form-data; name="fileUpload"; filename="60-130121114121.jpg"
* Content-Type:image/jpeg
*/
String cd = p.getHeader("Content-Disposition");
String cds[] = cd.split(";");
if(cds == null || cds.length < 3)
throw new IllegalArgumentException();
String fileNameStr = cds[2];
String[] files = fileNameStr.split("=");
String fileName = files[1];
InputStream in = p.getInputStream();
if(fileName != null)
fileName = fileName.substring(1, fileName.length()-1);
dealFile(in, fileName.trim());
}
response.setCharacterEncoding("gbk");
response.getWriter().append("上传成功!");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
private void dealFile(InputStream in, String fileName){
OutputStream out = null;
try{
byte[] b = new byte[1024];
//此处path仅做示例,需要自己改写。
String path = "d:\test\"+fileName;
out = new FileOutputStream(new File(path));
int len = 0;
while((len = in.read(b)) != -1){
out.write(b, 0, len);
}
}catch(Exception e){
e.printStackTrace();
}finally {
try {
if(in != null)
in.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if(out != null)
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@MultipartConfig:需要加上这个注解,否则上传无效。
关于servlet3.0注解新特性参考文章:https://www.ibm.com/developerworks/cn/java/j-lo-servlet30/