栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

文件上传(spring MVC框架实现)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

文件上传(spring MVC框架实现)

今天学习了一个springMVC框架中实现文件上传的操作(该项目为maven),一下为我的课程总结:

目录

1-导入依赖

2-配置MultipartResolver

3-编写表单上传页面

》单文件上传页面

》多文件上传页面

4-编写控制器

》单文件控制器编写

》多文件控制器编写

5-创建成功页面


1-导入依赖
        
            commons-io
            commons-io
            2.6
        
        
            commons-fileupload
            commons-fileupload
            1.3.1
        

两个jar包分别是:文件上传使用 Apache Commons FileUpload 组件,需要导入 commons-io-2.4.jar 和 commons-fileupload-1.2.2.jar 两个 jar 文件(可在 Apache 官网下载)。

注意:依赖必须加载到web下的lib文件中,否则会报错。

2-配置MultipartResolver

在springMVC-servlet.xml文件中配置:



    

    

MultipartResolver接口处理文件上传的数据,操作方便,他的两个实现类是:

  • StandardServletMultipartResolver:使用了servlet 3.0 标准的上传方式。
  • CommonsMultipartResolver:使用了Apache的Commons-fileupload来完成文件上传的操作。

MultipartResolver接口具有以下常用方法:

名称作用
String getOriginalFileName()返回客户端提交的原始文件名
void transferTo(File destination)将上传的文件保存到目标目录下
boolean isEmpty()判断上传的文件是否为空

3-编写表单上传页面

》单文件上传页面
单文件上传

<%--如果是form表单的话,在form标签中加入 enctype="multipart/form-data"--%>
选择文件:


注意:负责文件上传表单的编码类型必须是“multipart/form-data”类型。

》多文件上传页面
多文件上传

<%--如果是form表单的话,在form标签中加入 enctype="multipart/form-data" 上传多文件的话,需要加入multiple="multiple" --%>
选择文件(可选择多个文件):


多文件上传时:需要加入multiple。

4-编写控制器

》单文件控制器编写
@RequestMapping("/simple2")
    public String getSimple_fileUp2(@RequestParam("file") CommonsMultipartFile file, Model model,HttpServletRequest request) {

        if(!file.isEmpty()){
            //获取文件名称
            String filename = file.getOriginalFilename();
            System.out.println("源文件名称===="+file.getOriginalFilename());
            //获取文件扩展名称
            String extension = FilenameUtils.getExtension(filename);//jpg , webp……
            System.out.println("获取文件扩展名称===="+extension);
            //获取文件大小
            long size = file.getSize();
            System.out.println("文件大小:"+size);
            if(size>500000){
                model.addAttribute("msg", "文件不能超过500kB,上传失败");
                return "error";
            }
            //获取img上下文真实路径  使用File.separator(window、Linux自适应路径分隔符,他们的路径分隔符不同)
            String realPath = request.getSession().getServletContext().getRealPath("WEB-INF" + File.separator + "static" + File.separator + "img");
            File file1=new File(realPath);
            while (!file1.exists()) {
                //文件不存在时创建文件
                file1.mkdir();
            }
            try {
                // 将文件内容传输到指定文件中
                file.transferTo(new File(file1,UUID.randomUUID()+filename));
            } catch (IOException e) {
                e.printStackTrace();
                model.addAttribute("msg", "上传失败");
                return "error";
            }
        }else {
            model.addAttribute("msg", "上传失败");
            return "error";
        }
        model.addAttribute("msg", "上传成功");
        return "success";

    }

在实际开发项目中,需要注意下几点:

一、要获取原文件名及后缀

        在实际项目中,对于用户上传文件需要有一定的规范。例如上传个人的证件照,需要的类型的文件为.jpg 、.jpeg 、 .png  、.pneg 。若服务器为Linux系统,上传的文件名存在中文会出现乱码,并存在重名的问题,重名的文件将覆盖上一个同名文件,这是一个严重的问题,所有需要对上传的文件进行重命名。

二、定义上传文件路径

        上传的文件路径使用request.getSession().getServletContext().getRealPath()获取指定的文件路径,指定的文件目录有多个时,需要使用File.separator自适应路径分隔符。因为文件上传到web服务器,实际项目的服务器可能是Window系统,也有可能是LInux系统,他们的路径分隔符是不同的。

》多文件控制器编写
//多文件上传
    @RequestMapping("/multipart")
    public String getMultipart_fileUp(HttpServletRequest request, Model model){
        // 创建一个通用的多部分解析器
        CommonsMultipartResolver commonsMultipartResolver=new CommonsMultipartResolver();
        //判断 request 是否有文件上传,即多部分请求
        if(commonsMultipartResolver.isMultipart(request)){
            MultipartHttpServletRequest httpservletrequest = (MultipartHttpServletRequest)request;
            List multipartFiles=httpservletrequest.getFiles("file");
            for (int i = 0; i < multipartFiles.size(); i++) {
                //获取当前文件对象
                MultipartFile multipartFile = multipartFiles.get(i);
                String originalFilename = multipartFile.getOriginalFilename();
                //文件路径
                String filePath=request.getSession().getServletContext().getRealPath("WEB-INF" + File.separator + "static" + File.separator + "img");
                File file=new File(filePath);
                if(!file.exists()){
                    //如果文件不存在,则创建
                    file.mkdir();
                }
                try {
                    //文件上传
                    multipartFile.transferTo(new File(file,UUID.randomUUID()+originalFilename));
                } catch (IOException e) {
                    e.printStackTrace();
                    model.addAttribute("msg", "上传失败");
                    return "error";
                }
            }
        }else {
            model.addAttribute("msg", "上传失败");
            return "error";
        }
        model.addAttribute("msg", "上传成功");
        return "success";
    }

注意:文件的重命名还可以使用一下方法

  System.currentTimeMillis()+RandomUtils.nextInt(100000000)
//使用RandomUtils获取0~100000000以内的随机数,需要引入Commons-lang-2.6.jar包

5-创建成功页面
 

恭喜你!!${msg}了
--<-<-<@

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/353861.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号