java代码
servlet包
package servlet;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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 util.FileUtil;
public class RegistServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("registServlet");
InputStream is = null;
FileOutputStream fos = null;
//1.判断是否为multipart类型的请求
if(!ServletFileUpload.isMultipartContent(req)) {
throw new RuntimeException("不是Multipart请求");
}else {
//2.获取工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//3.通过工厂创建核心组件
ServletFileUpload sfu = new ServletFileUpload(factory);
try {
//4.通过核心组件解析请求,获取List-
List
items = sfu.parseRequest(req);
//5.遍历items
for(FileItem item : items) {
//6.判断是否为普通参数
if(item.isFormField()) {
//7.获取普通参数的key和value
String key = item.getFieldName();
String value = item.getString();
System.out.println("key:"+key+",value:"+value);
}else {
//8.获取文件信息
String fileName = item.getName(); //获取文件名
System.out.println("fileName:"+fileName);
//9.获取输入流(文件在这个流里面)
is = item.getInputStream();
//10.创建一个输出流
String url = req.getServletContext().getRealPath("/file/a/b/c"); //获取真实路径
System.out.println("url:"+url);
//D:apache-tomcat-9.0.24webappsjavaweb11file
//保证这个路径已经创建
fos = new FileOutputStream(FileUtil.createFile(url, fileName));
byte[] bytes = new byte[1024];
int len = 0;
while((len=is.read(bytes)) != -1) {
fos.write(bytes, 0, len);
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} finally {
if(is != null) {
is.close();
}
if(fos != null) {
fos.close();
}
}
}
}
}
package servlet;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ToRegistServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getRequestDispatcher("WEB-INF/jsp/regist.jsp").forward(req, resp);
}
}
filter包
package filter;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyFilter extends HttpFilter{
@Override
protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws IOException, ServletException {
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath();
request.getServletContext().setAttribute("basePath", basePath);
super.doFilter(request, response, chain);
}
}
util包
package util;
import java.io.File;
public class FileUtil {
//parentUrl:D://卓讯/课件 childUrl:文件上传.pdf
public static File createFile(String parentUrl, String childUrl) {
File file = new File(parentUrl);
if (!file.exists()) {
file.mkdirs();
}
File result = new File(parentUrl, childUrl);
return result;
}
}
html代码
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
用户注册
web.xml代码
fileloade registServlet servlet.RegistServlet registServlet /regist.do toRegisterServlet servlet.ToRegistServlet toRegisterServlet /toregist.do myFilter filter.MyFilter myFilter /*
访问路径:
http://localhost:8080/fileloade/toregist.do
bug:当启动tomcat是上传的内容被清空。
需要jar包:
/fileloade/WebContent/WEB-INF/lib/commons-fileupload-1.3.1.jar
/fileloade/WebContent/WEB-INF/lib/commons-io-2.2.jar
/fileloade/WebContent/WEB-INF/lib/jstl-1.2.jar
/fileloade/WebContent/WEB-INF/lib/servlet-api.jar
/fileloade/WebContent/WEB-INF/lib/standard-1.1.2.jar



