springmvc使用ApacheFileUpload组件实现文件上传步骤详解

步骤

  1. 添加依赖
  2. upload.jsp页面
  3. UploadController.java 控制器
  4. 测试

实现

  1. 添加依赖

    <!--添加Apache文件上传支持-->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.1</version>
    </dependency>
    
  2. upload.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>upload</title>
</head>
<body>
    <form action="/fileUpload" method="post" enctype="multipart/form-data">
        用户名:<input type="text" name="username"> <br>
        文件: <input type="file" name="imgFile"> <br>
        <input type="submit" value="上传">
    </form>
</body>
</html>
  1. UploadController.java 控制器

    package com.lilei.upload;
    
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileItemFactory;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import javax.servlet.http.HttpServletRequest;
    import java.io.File;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.List;
    import java.util.UUID;
    
    /**
     * 1.Apache提供的文件上传支持
     */
    @Controller
    public class UploadController {
    
        @RequestMapping("/fileUpload")
        public String upload(HttpServletRequest request) throws Exception {
            //1. 获取上传的目录路径
            // H:/classes/baseproject/springmvc02/target/springmvc02-1.0-SNAPSHOT/upload
            String path = request.getSession().getServletContext().getRealPath("/upload");
    
            //2. 以天为单位,一天创建一个文件夹,保存当天上传的文件
            String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
    
            //3. 创建目录
            File file = new File(path,date);
            if (!file.exists()){
                // 创建目录或子目录
                file.mkdirs();
            }
    
            //4. 文件上传
            //4.1 FileItem的工厂
            FileItemFactory factory = new DiskFileItemFactory();
            //4.2 文件上传组件提供的文件上传核心Api,对象servlet中文件上传提供支持。
            ServletFileUpload upload = new ServletFileUpload(factory);
            //4.3 把request对象,转换为FileItem
            // <input type="text" name="username">  用FileItem封装
            // <input type="file" name="imgFile">   用FileItem封装
            List<FileItem> items = upload.parseRequest(request);
            //4.4 遍历
            for (FileItem item : items){
                if (item.isFormField()){
                    // 说明是普通文本框:<input type="text" name="username">
                    System.out.println("用户名:" + item.getString("UTF-8"));
                } else {
                    // 说明是文件域:<input type="file" name="imgFile"> ,就要文件上传
                    //a. 获取文件名
                    String fileName = item.getName();
                    //b. 处理文件名唯一. 文件名=uuid + 文件后缀
                    fileName = UUID.randomUUID().toString() + fileName.substring(fileName.lastIndexOf("."));
                    //c. 上传  【最关键】
                    item.write(new File(file,fileName));
                    //d. 删除临时文件
                    item.delete();
                }
            }
            return "success";
        }
    
        public static void main(String[] args) {
            String fileName = "a.jpg";
            String result = UUID.randomUUID().toString() + fileName.substring(fileName.lastIndexOf("."));
            System.out.println(result);
        }
    
    }
    

之后就可以实现上传了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值