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<item>
List<FileItem> 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.24\webapps\javaweb11\file
//保证这个路径已经创建
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"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>用户注册</title>
</head>
<body>
<form action="<%=application.getAttribute("basePath") %>/regist.do" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
上传文件:<input type="file" name="registfile"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
web.xml代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>fileloade</display-name>
<servlet>
<servlet-name>registServlet</servlet-name>
<servlet-class>servlet.RegistServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>registServlet</servlet-name>
<url-pattern>/regist.do</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>toRegisterServlet</servlet-name>
<servlet-class>servlet.ToRegistServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>toRegisterServlet</servlet-name>
<url-pattern>/toregist.do</url-pattern>
</servlet-mapping>
<filter>
<filter-name>myFilter</filter-name>
<filter-class>filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
访问路径: 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