ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第一节:SpringMVC 的文件上传

2021-12-04 22:35:18  阅读:153  来源: 互联网

标签:文件 String uploadFile SpringMVC 第一节 value model 上传


一、SpringMVC 的文件上传

  1、Spring MVC 为文件上传提供了直接的支持,这种支持是通过即插即用的 MultipartResolver 实现的。   2、Spring 用 Jakarta Commons FileUpload 技术实现了一个 MultipartResolver 实现类:CommonsMultipartResolver   3、SpringMVC 上下文中默认没有装配 MultipartResolver,因此默认情况下不能处理文件的上传工作,如果想要使用 Spring 的文件上传功能,需要在上下文中配置 MultipartResolver。   MultipartFile  接口:     

 

   继承结构:

    

 

 

  4、配置 MultipartResolver      其中有两个常用属性:             defaultEncoding:必须和用户 JSP 的 pageEncoding 属性一直,以便于正确解析表单的内容。             maxUploadSize:设置上传文件的最大文件的大小(单位是字节)      注意:为了让 CommonsMultipartResolver 正确工作,必须先将 Jakarta Commons FileUpload 及 Jakarta Commons io 的类包添加到类路径下。

 

 

二、文件上传示例

  1、导入 jar 包

commons-fileupload-1.2.1.jar
commons-io-2.0.jar

 

    Maven 方式:

        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>

 

 

  2、配置文件解析器

    在SpringMVC中配置一个文件上传解析器:

    <!--  配置文件上传解析器,id必须是  multipartResolver -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--设置上传文件的最大值-->
        <property name="maxUploadSize" value="#{1024*1024*1024}"/>
        <!--设置默认编码-->
        <property name="defaultEncoding" value="utf-8"/>
    </bean>

 

 

  3、页面表单

<form action="${ctp}/upload" method="post" enctype="multipart/form-data">
    用户头像:<input type="file" name="headerImg" /><br>
    用户名称:<input type="text" name="userName" /><br>
    <input type="submit" value="提交">
</form>

 

  4、控制器方法

    @RequestMapping(value = "/upload")
    public String upload(@RequestParam(value = "userName", required = false) String userName,
                         @RequestParam(value = "headerImg") MultipartFile uploadFile,
                         Model model) {

        System.out.println("上传的文件的信息:" + uploadFile);
        System.out.println(uploadFile.getName());
        System.out.println(uploadFile.getOriginalFilename());

        //文件保存
        File localFile = new File("H:\\111学习\\" + uploadFile.getOriginalFilename());
        try {
            uploadFile.transferTo(localFile);
            model.addAttribute("msg", "文件上传成功!");
        } catch (IOException e) {
            model.addAttribute("msg", "文件上传失败!" + e.getMessage());
        }


        return "forward:/index.jsp";
    }

 

 

  5、小结

  (1)文件上传表单准备, enctype="multipart/form-data"
  (2)导入 commons-fileupload
  (3)只要在 SpringMVC 配置文件中,配置一个文件上传解析器 MultipartResolver
  (4)文件上传请求处理
    只需要在处理器入参写一个@RequestParam(value = "headerImg") MultipartFile uploadFile 封装当前文件的信息,可以直接保存

 

 

三、多文件上传

  当有多个 File 需要上传时,可以使用数组来接收:

  页面表单:

<form action="${ctp}/uploadFiles" method="post" enctype="multipart/form-data">
    用户头像:<input type="file" name="headerImg" /><br>
    用户头像:<input type="file" name="headerImg" /><br>
    用户头像:<input type="file" name="headerImg" /><br>
    用户头像:<input type="file" name="headerImg" /><br>
    用户名称:<input type="text" name="userName" /><br>
    <input type="submit" value="提交">
</form>

 

  控制器方法:

    /**
     * 多文件上传
     * @param userName
     * @param uploadFile
     * @param model
     * @return
     */
    @RequestMapping(value = "/uploadFiles")
    public String uploadFiles(@RequestParam(value = "userName", required = false) String userName,
                         @RequestParam(value = "headerImg") MultipartFile[] uploadFile,
                         Model model) {

        System.out.println("上传的文件的信息:" + uploadFile);
        for (MultipartFile multipartFile : uploadFile) {
            if (!multipartFile.isEmpty()) {
                //获取上传文件的名称
                String fileName =  multipartFile.getOriginalFilename();

                //使用 UUID 或时间戳来给文件命名,防止重名
                String finalFileName =  UUID.randomUUID()  +fileName.substring(fileName.lastIndexOf("."));

                //设置文件保存的位置
                String path =  "H:\\111学习" +  File.separator + finalFileName;

                File newFile = new File(path);

                try {
                    //将文件从原处复制到目标处
                    multipartFile.transferTo(newFile);
                    model.addAttribute("msg", "文件上传成功!");
                } catch (IOException e) {
                    model.addAttribute("msg", "文件上传失败!" + e.getMessage());
                }
            }
        }
        return "forward:/index.jsp";
    }

 

 

  如果表单里面的 file 的name 值不一样,可以在入参再写一个 MultipartFile 进行接收即可。

 

标签:文件,String,uploadFile,SpringMVC,第一节,value,model,上传
来源: https://www.cnblogs.com/niujifei/p/15643471.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有