SSH框架之SpringMVC文件上传功能代码

简介

  1.上一篇博客我们讲解了普遍情况下都适用的文件上传的功能代码,那么本篇博客将会重点讲解SSH框架之SpringMVC的文件上传代码; 
  2.SpringMVC框架本身就已经封装了特有的文件获取和解析的方法,所以,我们之需要将这些方法熟练运用展示出即可; 
  3.本篇实例将会分成四个步骤,给您展示一步到位的完善的springmvc文件上传: 
  (1).需要的jar包; 
  (2).jsp页面; 
  (3).xml配置; 
  (4).后台controller处理方法;

实例

  1.需要提供的jar包:commons.fileupload-1.2.1.jar; commons.io-1.4.0.jar 
   
  2.jsp页面:

<form action="uploadId" method="post" enctype="multipart/form-data">  
       <input type="file" name="idPic" />  
       <button >Submit</button>  
</form> 

<!--注意:要在form标签中加上enctype="multipart/form-data"表示该表单是要处理文件的,
这是最基本的东西,很多人会忘记然而当上传出错后则去找程序的错误,却忘了这一点 -->
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

  3.xml文件配置:

<!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 -->  
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
        <property name="defaultEncoding" value="UTF-8" />  
        <!-- 指定所上传文件的总大小不能超过200KB。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->  
        <property name="maxUploadSize" value="200000"/>  
        <property name="uploadTempDir" value="uploadTempDirectory" />
</bean>  

<!-- 属性详解:
defaultEncoding="UTF-8" 是请求的编码格式,默认为iso-8859-1
maxUploadSize="200000" 是上传文件的大小,单位为字节
uploadTempDir="uploadTempDirectory" 为上传文件的临时路径,可自定义  -->  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

   4.后台controller处理方法类:

/**
 * springMVC文件上传方法实例
 * @author hqc
 *
 */
@Controller
@RequestMapping(value = "${adminPath}/upload")
public class Uploadfile(){

    /** 
    * 单文件上传:
    * 用@RequestParam注解来指定表单上的file为MultipartFile  
    * 参数都会实行自动装配~
    * @param multipartfile 
    * @return 
    * @throws IOException  
    */  
   @RequestMapping(value = "/uploadId")  
   @ResponseBody
   public String idIdentification(@RequestParam("idPic") MultipartFile multipartfile) throws IOException {  

       //测试获取到的文件信息
       System.out.println("getOriginalFilename:"+multipartfile.getOriginalFilename());  
       System.out.println("getName:"+multipartfile.getName());  

       // 设置返回的文件格式,图片  
       //HttpHeaders headers = new HttpHeaders();  
       //headers.setContentType(MediaType.IMAGE_JPEG);  

       //获取项目保存文件的根目录
       String savePath = request.getSession().getServletContext().getRealPath("/uploadFile/placeImage");    

       //根据原文件名使用时间戳和随机数重命名,保存
       SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");
       String fileName = imageFile.getOriginalFilename();
       String lastThreeLetter = fileName.substring(fileName.lastIndexOf("."));
       String sqlName = sdf.format(new Date())+(int)(Math.random()*10000)+lastThreeLetter;          

       //根据根目录和文件名,创建新的文件路径  
       File saveFile = new File(savePath+File.separator+sqlName);  

       //将获取到的前台的文件流转换到新的文件上面
       //springmvc已经封装了输入和输出流方法,无需再写输入输出流
       multipartfile.transferTo(saveFile);  

       //返回json
        String json = "{\"result\":\""+result+"\"}";
        return json;

       //返回页面显示用户上传的图片  
       //return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(saveFile), headers, HttpStatus.OK);  
   }  

    /** 
     * 多文件上传:
     * 前台可上传多个文件,使用MultipartFile的数组形式接收
     * @param multipartfiles 
     * @return 
     * @throws IllegalStateException 
     * @throws IOException 
     */  
    @RequestMapping(value = "/multiUploadId")  
    public String multiUpload(@RequestParam("idPic") MultipartFile[] multipartfiles)   
            throws IllegalStateException, IOException {  

        //获取项目保存文件的根目录
        String savePath = request.getSession().getServletContext().getRealPath("/uploadFile/placeImage"); 

        //格式化时间戳
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");
        String timePath = sdf.format(new Date());

        if(null != multipartfiles && multipartfiles.length > 0){  
            //遍历并保存文件  
            for(MultipartFile file : multipartfiles){  
                //1. 使用原文件名作为保存的路径
                //file.transferTo(new File(savePath + file.getOriginalFilename()));  

                //2. 针对每个文件创建不同的时间戳+随机数名称
                   String fileName = file.getOriginalFilename();
                   String lastThreeLetter = fileName.substring(fileName.lastIndexOf("."));
                   String sqlName = timePath+(int)(Math.random()*10000)+lastThreeLetter;    

                   //根据根目录和文件名,创建新的文件路径  
                   File saveFile = new File(savePath+File.separator+sqlName);

                   //将获取到的每个文件流分别转换到新的文件上面
                   //springmvc已经封装了输入和输出流方法,无需再写输入输出流
                   multipartfile.transferTo(saveFile);  
            }  
        }  
        return "redirect:uploadPage";  
    }  
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94

总结

  1.以上就是springMVC上传文件的全部流程,代码也是简洁方便,对于还不是很了解springmvc上传文件的程序猿还是有帮助的,有需要的可以自行复制代码,然后可以经过自己的进一步加工,形成对自己最有效的一套代码; 
   
  2.实践是检验认识真理的唯一标准,代码好不好用,何不亲自动手实践看看;

猜你喜欢

转载自blog.csdn.net/myth_g/article/details/79861664