SpringMVC文件上传

文件上传

1、文件上传客户端的三要素

  • 表单 type="file"
  • 表单提交的方式:post
  • 表单的enctype属性是多部分表单形式,及enctype="multipart/form-data"

2、单文件上传步骤

① 导入fileupload和io坐标

② 配置文件上传解析器

③ 编写文件上传代码

 <!--文件上传 -->
        <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>
        <!--servlet-api导入高版本的-->
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>

② 配置文件上传解析器(springMVC-Servlet)

<!--文件上传配置-->
    <bean id="multipartResolver"  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1 -->
        <property name="defaultEncoding" value="utf-8"/>
        <!-- 上传文件大小上限,单位为字节(10485760=10M) -->
        <property name="maxUploadSize" value="10485760"/>
        <property name="maxInMemorySize" value="40960"/>
    </bean>

  • 单文件上传
<form action="${pageContext.request.contextPath}/user/fileupload" enctype="multipart/form-data" method="post">
    选择文件:<input type="file" name="upload" > <br>
    <input type="submit" value="上传">
</form>
@RequestMapping("/fileupload")
    //这里MultipartFile对象的名字必须和表单文件选项的名字一样,upload就是经过文件解析器解析request获得的文件项
    public String fileupload(HttpServletRequest request, MultipartFile upload) throws Exception {
        //获取上传的位置
        String path = request.getSession().getServletContext().getRealPath("/uploads/");
        //判断该路径是否存在
        File file = new File(path);
        if(!file.exists()){
            //创建文件夹
            file.mkdirs();
        }
        //获取上传文件的名称
        String filename = upload.getOriginalFilename();
        //把文件名称设置成唯一值:UUID通用唯一标识符(Universally Unique Identifier)
        String uuid = UUID.randomUUID().toString().replace("-", "");
        filename=uuid+"_"+filename;
        //完成文件上传:路径+文件名字
        upload.transferTo(new File(path,filename));
       
        return "success";
    }
  • 多文件上传

    1. 第一种方法
    <form action="${pageContext.request.contextPath}/user/fileupload" enctype="multipart/form-data" method="post">
        选择文件:<input type="file" name="upload" > <br>
        选择文件:<input type="file" name="upload1" > <br>
        <input type="submit" value="上传">
    </form>
    
    @RequestMapping("/fileupload")
        //这里MultipartFile对象的名字必须和表单文件选项的名字一样,upload就是经过文件解析器解析request获得的文件项
        public String fileupload(HttpServletRequest request, MultipartFile upload,MultipartFile upload1) throws Exception {
            //获取上传的位置
            String path = request.getSession().getServletContext().getRealPath("/uploads/");
            //判断该路径是否存在
            File file = new File(path);
            if(!file.exists()){
                //创建文件夹
                file.mkdirs();
            }
            //获取上传文件的名称
            String filename = upload.getOriginalFilename();
             String filename1 = upload1.getOriginalFilename();
            //把文件名称设置成唯一值:UUID通用唯一标识符(Universally Unique Identifier)
            String uuid = UUID.randomUUID().toString().replace("-", "");
            String uuid1 = UUID.randomUUID().toString().replace("-", "");
            filename=uuid+"_"+filename;
            filename=uuid1+"_"+filename1;
            //完成文件上传:路径+文件名字
            upload.transferTo(new File(path,filename));
           	upload.transferTo(new File(path,filename1));
            return "success";
        }
    
  1. 第二种方法

    <form action="${pageContext.request.contextPath}/user/fileupload" enctype="multipart/form-data" method="post">
        选择文件:<input type="file" name="upload" > <br>
        选择文件:<input type="file" name="upload" > <br>
        <input type="submit" value="上传">
    </form>
    
    @RequestMapping("/fileupload")
        //这里MultipartFile对象的名字必须和表单文件选项的名字一样,upload就是经过文件解析器解析request获得的文件项
        public String fileupload(HttpServletRequest request, MultipartFile [] upload) throws Exception {
            //获取上传的位置
            String path = request.getSession().getServletContext().getRealPath("/uploads/");
            //判断该路径是否存在
            File file = new File(path);
            if(!file.exists()){
                //创建文件夹
                file.mkdirs();
            }
            //获取上传文件的名称
            for(MultipartFile multipartFile : upload ){
                multipartFile.getOriginalFilename();
                //把文件名称设置成唯一值:UUID通用唯一标识符(Universally Unique Identifier)
           		 String uuid = UUID.randomUUID().toString().replace("-", "");
                 filename=uuid+"_"+filename;
                //完成文件上传:路径+文件名字
            upload.transferTo(new File(path,filename));
            }
            return "success";
        }
    
posted @   你是恩赐,也是劫  阅读(94)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示