基于SSM框架的使用MultipartFile实现单个文件或多个文件的上传/下··

MultipartFile是在web中对文件上传的一个组件,关于怎么使用,在这里做一个简单的demo

                                                                                                                                        —— @Yelihu 2018年9月20日 00:36:21

1.在maven中,首先导入apache commons uploadfile的包。在respository中搜索uploadfile即可,选择1.31或者1.33版本的随意,复制粘贴在pom.xml,若不是maven项目,则需要下载添加相应的jar包

2.注册文件上传解析器,在spring的配置文件里面(属性的作用如注解标识)


	
	
	
	     
		  
		  
	          104857600    
	          
	            
	            4096    
	        
		  
	             
	            utf-8    
	         
      

ps.属性补充:

基于SSM框架的使用MultipartFile实现单个文件或多个文件的上传/下··_第1张图片

3.前端代码文件提交部分:*注意:由于上传所遵循的传输协议要求特殊,所以要在前端提交表单的时候添加一个属性 enctype即encoding type 文件上传的内容在正文,必须使用POST请求而不是GET

               

 

4.controller部分代码,获取文件和文件名称,对文件名称进行处理(添加时间戳防止重名)之后,保存在本机的E盘下,结束并跳转到成功页面 upload_success.jsp并打印成功信息

/**
     * 上传文件
    
     * */
    @RequestMapping(value="/uploadtest")
    public String uploadtest(@RequestParam("file")MultipartFile multipartFile, Model model){//入参代表上传的文件

            //0,判断是否为空
        if(multipartFile!=null && !multipartFile.isEmpty())
        {

            /**
             * 对文件名进行操作防止文件重名
             */

            //1,获取原始文件名
            String originalFilename = multipartFile.getOriginalFilename();
            //2,截取源文件的文件名前缀,不带后缀
            String fileNamePrefix = originalFilename.substring(0,originalFilename.lastIndexOf("."));
            //3,加工处理文件名,原文件加上时间戳
            String newFileNamePrefix  = fileNamePrefix + System.currentTimeMillis();
            //4,得到新文件名
            String newFileName = newFileNamePrefix + originalFilename.substring(originalFilename.lastIndexOf("."));


            //5,构建文件对象
            File file = new File(upLoadPath + newFileName);
            //6,执行上传操作
            try {
                multipartFile.transferTo(file);
                //上传成功,向jsp页面发送成功信息
                model.addAttribute("fileName","文件上传成功!  文件名:"+newFileName);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

       return "system/plansubmit/upload_success";
    }

多个文件上传操作

如上,已经完成了对单个文件上传的操作,控制台已经能打印出文件的名称(处理后)并保存文件到指定的E盘根目录下

对于多个文件,只需要修改前端代码(多个文件input)+controller 即可。

JSP页面:


即多个name为file的input,不需要给多个name命名,后台使用Multipart[] 这个数组接收即可

 

Controller代码如下:

@RequestMapping(value="/uploadtest2")
    public String uploadtest2(@RequestParam("file")MultipartFile[] multipartFiles,Model model){//入参代表上传的文件

        //设置list存放数组
        List fileNames = new ArrayList<>();

        //0,判断是否为空
        if(multipartFiles!=null && multipartFiles.length>0)
        {
            for (MultipartFile multipartFile:multipartFiles)
            {
                if(multipartFile!=null && !multipartFile.isEmpty())
                {

                    /**
                     * 对文件名进行操作防止文件重名
                     */

                    //1,获取原始文件名
                    String originalFilename = multipartFile.getOriginalFilename();
                    //2,截取源文件的文件名前缀,不带后缀
                    String fileNamePrefix = originalFilename.substring(0,originalFilename.lastIndexOf("."));
                    //3,加工处理文件名,原文件加上时间戳
                    String newFileNamePrefix  = fileNamePrefix + System.currentTimeMillis();
                    //4,得到新文件名
                    String newFileName = newFileNamePrefix + originalFilename.substring(originalFilename.lastIndexOf("."));


                    //5,构建文件对象
                    File file = new File(upLoadPath + newFileName);
                    //6,执行上传操作
                    try {
                        multipartFile.transferTo(file);
                        //上传成功,把 文件名 存入list里面
                        fileNames.add(newFileName);

                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

            }
        }

        //list传送到前端
        model.addAttribute("fileNames",fileNames);

        return "system/plansubmit/upload2_success";
    }

设置List存放多个文件的名字,循环内部对每个文件进行文件名处理并输出

如上,已经完成了对多个文件上传的操作,文件已经保存到到指定的E盘根目录下。

 

 

 

 

 

你可能感兴趣的:(基于SSM框架的使用MultipartFile实现单个文件或多个文件的上传/下··)