maven依赖
javax.servlet
javax.servlet-api
4.0.1
provided
org.junit.jupiter
junit-jupiter-api
${junit.version}
test
org.junit.jupiter
junit-jupiter-engine
${junit.version}
test
javax.servlet.jsp
jsp-api
2.2
org.apache.taglibs
taglibs-standard-spec
1.2.1
org.apache.taglibs
taglibs-standard-impl
1.2.1
commons-fileupload
commons-fileupload
1.3.1
commons-io
commons-io
2.4
代码
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class UploadServlet extends HttpServlet {
//用来处理文件上传
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
//isMultipartContent这个方法返回true表示有文件的上传,false为普通表单
if (ServletFileUpload.isMultipartContent(req)) {
//创建FileItemFactory工厂的实现类.
FileItemFactory fileItemFactory = new DiskFileItemFactory();
//创建用于解析上传的工具类ServletFileUpload
ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
try {
//解析上传的数据,得到每一个表单项FileItem
List list = servletFileUpload.parseRequest(req);
//循环判断每一个表单项是普通表单还是上传的文件
for (FileItem fileItem : list) {
if (fileItem.isFormField()) {
System.out.println("表单项name属性:" + fileItem.getFieldName());
//参数UTF-8解决乱码问题
System.out.println("表单项value属性:" + fileItem.getString("UTF-8"));
} else {
//上传的文件
System.out.println("表单项name属性:" + fileItem.getFieldName());
System.out.println("上传的文件名:" + fileItem.getName());
fileItem.write(new File("c:\idea\" + fileItem.getName()));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}