【Javaweb】FileUpload工具类

修改时间: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():返回表单项的value
    • getName():返回上传文件的名称
    • getInputStream():获得上传文件
    • delete():删除临时文件

文件上传后台代码编写

  • FileUpload使用步骤:
  1. 创建磁盘文件项工厂
  2. 创建文件上传的核心类
  3. 解析request—获得文件项集合
  4. 遍历文件项集合
  5. 判断普通表单项/文件上传项

@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);
    }

}

猜你喜欢

转载自blog.csdn.net/weixin_46303867/article/details/113733488