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

版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/79327717

简介

  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"表示该表单是要处理文件的,
这是最基本的东西,很多人会忘记然而当上传出错后则去找程序的错误,却忘了这一点 -->

  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" 为上传文件的临时路径,可自定义  -->  

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

上一篇:图像滤镜艺术---乐高像素拼图特效滤镜的代码实现


下一篇:解析HTML文件 - 运用SgmlReader类来解析HTML文件