修改时间:2021年2月7日
作者:pp_x
邮箱:[email protected]
FileUpload工具类
需要导入的依赖
- FileUpload包可以很容易地将文件上传到你的Web应用程序.
- IOUtils封装了Java中io的常见操作,使用十分方便 ,需要下载
commons-io-1.4.jar
包 - pom.xml
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.1</version>
</dependency>
FileUpload核心类
DiskFileItemFactory
:磁盘文件项工厂, 读取文件时相关的配置,比如: 缓存的大小 , 临时目录的位置ServletFileUplaod
:文件上传的一个核心类FileItem
:代表每一个表单项
文件上传的API
- ServletFileUpload类的方法
isMultipartContent(request)
:判断是否是一个文件上传的表单parseRequest(request)
:解析request获得表单项的集合setHeaderEncoding("UTF-8")
: 设置上传的文件名的编码方式
- FileItem类的方法
isFormField()
:判断是否为普通表单项(true代表普通)getFieldName()
:返回表单项的name属性getString()
:返回表单项的valuegetName()
:返回上传文件的名称getInputStream()
:获得上传文件delete()
:删除临时文件
文件上传后台代码编写
- FileUpload使用步骤:
- 创建磁盘文件项工厂
- 创建文件上传的核心类
- 解析request—获得文件项集合
- 遍历文件项集合
- 判断普通表单项/文件上传项
@WebServlet("/upload")
public class FileUploadServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
//1.创建磁盘文件项工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//2.创建文件上传核心类
ServletFileUpload upload = new ServletFileUpload(factory);
//2.1 设置上传文件名的编码
upload.setHeaderEncoding("utf-8");
//2.2 判断表单是否是文件上传表单
boolean multipartContent = upload.isMultipartContent(req);
//2.3 是文件上传表单
if(multipartContent){
//3. 解析request ,获取文件项集合
List<FileItem> list = upload.parseRequest(req);
if(list != null){
//4.遍历获取表单项
for (FileItem item : list) {
//5. 判断是不是一个普通表单项
boolean formField = item.isFormField();
if(formField){
//普通表单项, 当 enctype="multipart/form-data"时, request的getParameter()方法 无法获取参数
String fieldName = item.getFieldName();
String value = item.getString("utf-8");//设置编码
System.out.println(fieldName + "=" + value);
}else{
//文件上传项
//文件名
String fileName = item.getName();
//避免图片名重复 拼接UUID
String newFileName = UUIDUtils.getUUID()+"_"+ fileName;
//获取输入流
InputStream in = item.getInputStream();
//创建输出流 输出到H盘
FileOutputStream fos = new FileOutputStream("H:/upload/" +newFileName);
//使用工具类IOUtils,copy文件
IOUtils.copy(in,fos);
//关闭流
fos.close();
in.close();
}
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}