zoukankan      html  css  js  c++  java
  • springmvc_文件上传

    1.页面表单

    <form role="form" th:action="@{/upload}" method="post" enctype="multipart/form-data">
        <div class="form-group">
            <label for="exampleInputEmail1">邮箱</label>
            <input type="email" name="email" class="form-control" id="exampleInputEmail1" placeholder="Enter email">
        </div>
        <div class="form-group">
            <label for="exampleInputPassword1">名字</label>
            <input type="text" name="username" class="form-control" id="exampleInputPassword1" placeholder="Password">
        </div>
        <div class="form-group">
            <label for="exampleInputFile">头像</label>
            <input type="file" name="headerImg" id="exampleInputFile">
        </div>
        <div class="form-group">
            <label for="exampleInputFile">生活照</label>
            <input type="file" name="photos" multiple><!--提交多个文件-->
        </div>
        <div class="checkbox">
            <label>
                <input type="checkbox"> Check me out
            </label>
        </div>
        <button type="submit" class="btn btn-primary">提交</button>
    </form>    

    2.文件上传代码

    /**
         * MultipartFile 自动封装上传过来的文件
         * @param email
         * @param username
         * @param headerImg
         * @param photos
         * @return
         * @throws IOException
         */
        @PostMapping("/upload")
        public String upload(@RequestParam("email") String email,
                             @RequestParam("username") String username,
                             @RequestPart("headerImg") MultipartFile headerImg,
                             @RequestPart("photos") MultipartFile[] photos) throws IOException {
            log.info("上传的信息:email={},username={},headerImg={},photos={}", email, username, headerImg.getSize(), photos.length);
            if (!headerImg.isEmpty()) {
                //生成保存后的文件名,UUID 32位随机字母+数字,把 - 替换为 ""
                String randomId = UUID.randomUUID().toString().replaceAll("-", "");
                //获取上传的文件名
                String originalFilename = headerImg.getOriginalFilename();
                //根据最后一个 . 截取,获取源文件的后缀名/扩展名 .jsp
                String exName = originalFilename.substring(originalFilename.lastIndexOf("."));
                //拼接上传后的文件名并上传
                String newName = randomId + exName;
                headerImg.transferTo(new File("E:\SSM\" + newName));
            }
            if (photos.length > 0) {
                for (MultipartFile photo : photos) {
                    if (!photo.isEmpty()) {
                        String randomId = UUID.randomUUID().toString().replaceAll("-", "");
                        String originalFilename = photo.getOriginalFilename();
                        String exName = originalFilename.substring(originalFilename.lastIndexOf("."));
                        String newName = randomId + exName;
                        photo.transferTo(new File("E:\SSM\" + newName));
                    }
                }
            }
            return "main";
        }

    3.自动配置原理

    文件上传自动配置类-MultipartAutoConfiguration-MultipartProperties

    • 自动配置好了 StandardServletMultipartResolver 【文件上传解析器】
    • 原理步骤
      • 1、请求进来使用文件上传解析器判断(isMultipart)并封装(resolveMultipart,返回MultipartHttpServletRequest)文件上传请求
      • 2、参数解析器来解析请求中的文件内容封装成MultipartFile
      • 3、将request中文件信息封装为一个Map;MultiValueMap<String, MultipartFile>

    FileCopyUtils。实现文件流的拷贝

     

      @PostMapping("/upload")
        public String upload(@RequestParam("email") String email,
                             @RequestParam("username") String username,
                             @RequestPart("headerImg") MultipartFile headerImg,
                             @RequestPart("photos") MultipartFile[] photos)

     

    4.设置文件大小

    在 application.properties 中设置

     

  • 相关阅读:
    Java笔记6之三目运算符
    java笔记5之逻辑运算符以及&&与&的区别
    SAP CRM OData模型里的addressable为true的含义
    SAP CRM OData multiple origin Composition的测试
    重构老系统遗留代码的一些方法学习笔记
    SAP CRM系统里的附件存储逻辑
    如何用Postman创建SAP CRM的Opportunity业务数据
    另一种使用SAP SAT事务码对通过浏览器启动的应用的性能测量和分析方式
    SAP Hybris Commerce,CRM和C4C的登录语言选择
    SAP Hybris Commerce的页面路由实现
  • 原文地址:https://www.cnblogs.com/LEPENGYANG/p/15335994.html
Copyright © 2011-2022 走看看