今天不想说废话,直接写过程:
第一步、导包(下载回去自己解压)
链接:https://pan.baidu.com/s/1wLeITdlzohl_dMckmRkH4w 密码:kw2u
第二步、我自己封装了一个方法专门处理,以后用直接复制这个文件
// 解析 request 里面的文件,存储在path目录下。返回文件路径列表
public static List<String> parseRequest(HttpServletRequest request, String path) throws FileUploadException, IOException {
List<String> paths = null;
// 创建文件解析器
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置解析编码
upload.setHeaderEncoding("UTF-8");
// 请求里面没有文件不予处理
if(!ServletFileUpload.isMultipartContent(request)){
return null;
}
// 获取表单中每一个输入项(可以不是文件类型)
List<FileItem> list = upload.parseRequest(request);
for(FileItem item: list) {
// 普通表单类型不予处理
if(item.isFormField()) continue;
if(paths == null) paths = new ArrayList<>();
// 获取上传文件的名称,若文件不存在不予处理
String filename = item.getName();
if(StringUtils.isEmpty(filename)) continue;
System.out.println("解析" + filename + "文件中");
// 统一使用 UUID 修改名称
filename = UUID.randomUUID().toString() + filename.substring(filename.indexOf("."));
InputStream in = item.getInputStream();
paths.add(String.join("/", path, filename));
FileOutputStream out = new FileOutputStream(String.join("/", path, filename));
byte []buffer = new byte[1024];
int len = 0;
while((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
in.close();
out.close();
// 删除临时文件
item.delete();
}
return paths;
}
第三步、servlet接收到请求时把request交给这个方法处理。其他表单域还像原来那样处理