20.文件上传功能

示例:
   1.页面代码如下:
       重点1: enctype="multipart/form-data"是必须的,且是固定写法
        <form action="/upload" method="post" enctype="multipart/form-data">
            <div>
                <label for="email">邮箱</label>
                <input type="email" name="email" id="email">
            </div>
            <div>
                <label for="username">名字</label>
                <input type="text" name="username" id="username">
            </div>
            <!--单选-->
            重点1:上传单个文件
            <div>
                <label for="headerImage">头像</label>
                <input type="file" name="headerImage" id="headerImage">
            </div>
            <!--多选-->
            重点2:加个multiple可以同时选择多个文件上传
            <div>
                <label for="lifeImages"></label>
                <input type="file" name="lifeImages" id="lifeImages" multiple>
            </div>
            <input type="submit" value="提交">
        </form>
    
    2.控制类代码:
        //页面请求路径
        @GetMapping("/getForm")
        public String getForm(){
            log.info("获取上传页面");
            return "/form/form_layouts";
        }
        //文件上传路径
        @PostMapping("/upload")
        public String uploadFile(@RequestParam("email") String email,
                                 @RequestParam("username") String username,
                                 重点3:使用MultipartFile接受文件上传数据,并且标签是@RequestPart
                                 @RequestPart("headerImage") MultipartFile headImg,
                                 @RequestPart("lifeImages") MultipartFile[] lifeImages) throws IOException {
            log.info("前台传来的email{},username{},headerImage{},lifeImages{}",
                    email,username,headImg.getSize(),lifeImages.length);
            重点4:判断文件上传数据是否为空
            if (!headImg.isEmpty()){
                重点5://获取文件的原始名字
                String name=headImg.getOriginalFilename();
                重点6://将文件保存到指定路径,并指定名称
                headImg.transferTo(new File("C:\\Users\\Administrator\\Desktop\\"+name));
            }
            if (lifeImages.length>0){
                for (MultipartFile lifeImage : lifeImages) {
                    if (!lifeImage.isEmpty()){
                        String name=lifeImage.getOriginalFilename();
                        lifeImage.transferTo(new File("C:\\Users\\Administrator\\Desktop\\"+name));
                    }
                }
            }
            //上传成功
            log.info("上传成功,返回到main页面..");
            return "main";
        }
        
    3.文件上传的自动配置类为:MultipartAutoConfiguration,配置类为:MultipartProperties
        里面指定了单个文件上传最大为1MB,多个文件上传总大小不能超过10MB
        所以在springboot配置文件中需要更改下:
            重点7:指定单次上传的文件大小
            spring.servlet.multipart.max-file-size=100MB
            重点8:指定多文件上传的总大小
            spring.servlet.multipart.max-request-size=1000MB
要不会因为文件上传大小限制导致异常!!!

 

posted @ 2022-05-11 22:04  努力的达子  阅读(73)  评论(0编辑  收藏  举报