文件上传
操作步骤:
1.在form表单中:
post方式
enctype=“multipart/from-date”
2.文件上传功能组件:jar包
commons-fileupload
commons-io
3.构建上传的类
构建工厂
构建对象
处理中英文乱码
获取上传文件集合:
从对象中获取到根路径
遍历上传的集合:
判断是否为文件格式
1.如果是文件直接上传
2.确定上传的路径
判断路径是否存在,不存在就创建
3.确保文件名不重复,应uuid方法
4.确定是否大三目录
5.执行上传
@WebServlet("/FileUpload")
public class MyFileUpload extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.创建工厂
DiskFileItemFactory dfif = new DiskFileItemFactory();
//2.创建对象,把工厂传进去
ServletFileUpload sfu = new ServletFileUpload(dfif);
//处理文件乱码
sfu.setHeaderEncoding("utf-8");
//存储上传文件的名称集合
ArrayList<String> names = new ArrayList<>();
try {
//获取文件上传的集合
List<FileItem> fileItems = sfu.parseRequest(request);
//遍历集合名
for (FileItem fi:fileItems) {
System.out.println(fi.getSize());
//判断表单是否为普通类型
if(fi.isFormField()){
//如果是直接输出文件名
System.out.println(fi.getName());
}else{
//否则该表单为file类型
String name = upload(fi);
//添加到集合里
names.add(name);
}
}
}catch (Exception e){
e.printStackTrace();
}
//request作用域用于回显页面信息
request.setAttribute("names",names);
//转发到页面
request.getRequestDispatcher("index.jsp").forward(request,response);
}
protected String upload(FileItem fi) throws Exception{
//获取上下文的根路径
String realPath = this.getServletContext().getRealPath("/upload");
//加载成文件
File file = new File(realPath);
//判断是否包含这个文件
if(!file.exists()){
//不包含就创建
file.mkdir();
}
//获取他的文件名
String name = fi.getName();
//分散文件
String[] split = name.split("\\.");
String newName = UUID.randomUUID() + "." + split[split.length-1];
//执行上传
fi.write(new File(realPath+"/"+newName));
System.out.println(realPath+"/"+newName);
return newName;
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
表单代码`<%--
Created by IntelliJ IDEA.
User: admin
Date: 2022/3/8
Time: 14:35
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<form action="FileUpload" method="post" enctype="multipart/form-data">
<input type="file" name="pic">
<input type="submit" value="上传">
</form>
<c:forEach items="${names}" var="name">
<img src="/upload/${name}">
<a href="FileDownload?filename=${name}">点击下载</a>
</c:forEach>
</body>
</html>
`