开发者社区> 尘光掠影> 正文

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

简介: 版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/79327717 简介  ...
+关注继续查看
版权声明:本文为博主原创文章,如需转载,请标明出处。 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.实践是检验认识真理的唯一标准,代码好不好用,何不亲自动手实践看看;

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SpringMVC文件上传(MultipartFile)
SpringMVC文件上传(MultipartFile)
28 0
Spring Cloud Feign的文件上传实现
Spring Cloud Feign的文件上传实现
34 0
SpringBoot 文件上传/下载
有啥不懂的或者出错的可以在下面留言。 1. 文件上传 //上传路径 String folder = "C:\\code\\springboot-springsecurity\\security-demo\\src\\main\\java...
1763 0
springcloud feign 实现文件上传
springcloud feign 实现文件上传
15 0
手写spring+springmvc+mybatis框架篇
本系列文章抽丝剥茧,源码分析百度有很多,在这里只列举几个我收录的优秀的博客推荐给大家,本文不过多的分析源码,更注重将代码理解后的实现。
2940 0
前端 css+js实现返回顶部功能
描述:        本文主要是讲,通过css+js实现网页中的【返回顶部】功能。   实现代码: HTML: 1 2 返回顶部 3   CSS: 1 /* return top */ 2 #btnTop { 3 display: none; 4 position:...
1173 0
+关注
97
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载