(14)SpringMVC - 文件上传

1.传统的文件上传

文件上传的必要条件:
在这里插入图片描述== 文件上传的原理分析==
在这里插入图片描述
在这里插入图片描述

借助第三方组件实现文件上传
在这里插入图片描述

1.1 导入文件上传的jar包

首先创建一个新项目
index.jsp文件中:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

    <!--上传文件的jar包-->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.1</version>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>

提交表单,所有的内容都会封装到request这个对象里边
所以我们要解析request,拿到上传文件的这个选项。
那么怎么拿到request呢?
在这里插入图片描述
执行的代码:

public String fileupload1(HttpServletRequest request) throws Exception{
        System.out.println("文件上传...");

        //使用fileupload组件完成文件上传
        //上传的位置   拿某某路径的绝对路径
        String path = request.getSession().getServletContext().getRealPath("/uploads/");
        //判断 ,该路径是否存在
        File file = new File(path);
        if(!file.exists()){
            //创建该文件夹
            file.mkdirs();
        }
        //解析request对象,获取上传文件项
        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        //解析request  这个集合里面装的全是文件项
        List<FileItem> items =  upload.parseRequest(request);
        //遍历文件项
        for(FileItem item : items){
            //进行判断,当前item对象是否是上传文件项
            if(item.isFormField()){
                //如果是true 说明普通表单向
            }else{
                //说明上传文件项
                //获取上传文件的名称
                String filename = item.getName();
                //完成文件上传
                item.write(new File(path,filename));
                //删除临时文件
                item.delete();
            }
        }
        return "success";
    }

我们选择我们要上传的文件
在这里插入图片描述
点击上传!!!
在这里插入图片描述
可以再target中找到上传的文件。
在这里插入图片描述

但是有时候传的文件名称是一样的,怎么区分呢?
在这里插入图片描述

public String fileupload1(HttpServletRequest request) throws Exception{
        System.out.println("文件上传...");

        //使用fileupload组件完成文件上传
        //上传的位置   拿某某路径的绝对路径
        String path = request.getSession().getServletContext().getRealPath("/uploads/");
        //判断 ,该路径是否存在
        File file = new File(path);
        if(!file.exists()){
            //创建该文件夹
            file.mkdirs();
        }
        //解析request对象,获取上传文件项
        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        //解析request  这个集合里面装的全是文件项
        List<FileItem> items =  upload.parseRequest(request);
        //遍历文件项
        for(FileItem item : items){
            //进行判断,当前item对象是否是上传文件项
            if(item.isFormField()){
                //如果是true 说明普通表单向
            }else{
                //说明上传文件项
                //获取上传文件的名称
                String filename = item.getName();
                //把文件的名称设置唯一值:uuid
                String uuid = UUID.randomUUID().toString().replace("-","");
                filename = uuid+"_"+filename;
                //完成文件上传
                item.write(new File(path,filename));
                //删除临时文件
                item.delete();
            }
        }
        return "success";
    }

再次运行点击:
查看我们选择的图片
在这里插入图片描述

2 SpringMVC的文件上传

2.1 SpringMVC的文件上传的原理分析

SpringMVC框架提供了MultipartFile对象,该对象表示上传的文件,要求变量名称必须和表单file标签的name属性名称相同。
在这里插入图片描述
在这里插入图片描述
首先用户端发送请求,然后上传文件,request到前端控制器。
文件解析器解析request请求,然后拿到上传文件项。
返回一个东西叫upload。(返回上传文件的对象)
然后继续执行那个Controller的方法,解析完了有一个upload对象
通过参数绑定的方式传给上传文件的方法。
那么我们接下来要做的事就是在方法中定义一个参数
SpringMVC提供一个类,表示上传文件的那个对象,只要在方法中定义这么一个类就行了
在这里插入图片描述

通过参数绑定的方式,把解析后的文件传给fileupload2这个方法。
那么参数中的upload代表的是upload这个文件项。
接下来我们只要调用upload这个文件项的方法,来最终完成文件的上传

注意:
在这里插入图片描述

配置文件解析器:
在这里插入图片描述

    <!--配置文件解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="10485760"/>
    </bean>

2.2 SpringMVC的文件上传的代码编写

1 配置文件解析器:

    <!--配置文件解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="10485760"/>
    </bean>

在这里插入图片描述

2 请求
在这里插入图片描述
3 方法
在这里插入图片描述

/**
         * SpringMVC文件上传
         */
        @RequestMapping("/fileupload2")
        public String fileupload2(HttpServletRequest request, MultipartFile upload) throws Exception{
            System.out.println("SpringMVC文件上传...");

            //使用fileupload组件完成文件上传
            //上传的位置   拿某某路径的绝对路径
            String path = request.getSession().getServletContext().getRealPath("/uploads/");
            //判断 ,该路径是否存在
            File file = new File(path);
            if(!file.exists()){
                //创建该文件夹
                file.mkdirs();
            }
            //说明上传文件项
            //获取上传文件的名称
            String filename = upload.getOriginalFilename();
            //把文件的名称设置唯一值:uuid
            String uuid = UUID.randomUUID().toString().replace("-", "");
            filename = uuid + "_" + filename;
            //完成文件上传
            upload.transferTo(new File(path,filename));
            return "success";
    }

再次运行启动:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3 跨服务器上传和搭建环境

在这里插入图片描述
创建一个新的项目
改变端口号
在这里插入图片描述

导入jar包:

在这里插入图片描述

请求:
在这里插入图片描述
方法:
在这里插入图片描述
然后再那个项目中手动创建一个uploads的文件夹
在这里插入图片描述
运行:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

所有代码的文件目录:

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值