您的位置:首页 > 编程语言 > Java开发

Spring MVC - MultipartFile实现文件上传

2018-05-03 13:22 288 查看
Spring MVC - MultipartFile实现文件上传(单文件与多文件上传)

前提:引入jar包。

[html] view plain copy
  1. <dependency>  
  2.     <groupId>commons-fileupload</groupId>  
  3.     <artifactId>commons-fileupload</artifactId>  
  4.     <version>1.3</version>  
  5. </dependency>  

一、配置文件:SpringMVC 用的是 的MultipartFile来进行文件上传 所以我们首先要配置MultipartResolver:用于处理表单中的file

[html] view plain copy
  1. <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 -->  
  2.     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
  3.         <property name="defaultEncoding" value="UTF-8" />  
  4.         <!-- 指定所上传文件的总大小不能超过200KB。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->  
  5.         <!-- <property name="maxUploadSize" value="200000"/> -->  
  6.         <!-- 指定上传文件的临时路径 -->  
  7.         <!-- <property name="uploadTempDir" value="uploadTempDirectory" /> -->  
  8.     </bean>   
属性详解:
defaultEncoding="UTF-8" 是请求的编码格式,默认为iso-8859-1
maxUploadSize="200000" 是上传文件的大小,单位为字节
uploadTempDir="uploadTempDirectory" 为上传文件的临时路径


二、创建一个简单的上传表单:

[html] view plain copy
  1. <form action="uploadId" method="post" enctype="multipart/form-data">  
  2.         <input type="file" name="idPic" />  
  3.         <button >Submit</button>  
  4.     </form>  
注意:要在form标签中加上enctype="multipart/form-data"表示该表单是要处理文件的,这是最基本的东西,很多人会忘记然而当上传出错后则去找程序的错误,却忘了这一点


三、编写上传控制类

1、创建一个控制类: FileUploadController,一个返回提交文件的页面
2、编写提交表单的action:
3、使用SpringMVC注解RequestParam来指定表单中的idPic参数;
4、指定一个用于保存文件的web项目路径
5、通过MultipartFile的transferTo(File dest)这个方法来转存文件到指定的路径。MultipartFile转存后,无法再操作,会报错

[java] view plain copy
  1. <span style="white-space:pre">    </span>//通过Spring的autowired注解获取spring默认配置的request  
  2.     @Autowired  
  3.     private HttpServletRequest request;  
  4.   
  5. <span style="white-space:pre">    </span>/** 
  6.      * 跳转到上传文件的页面 
  7.      * @return 
  8.      */  
  9.     @RequestMapping(value = "/uploadPage")  
  10.     public String uploadPage() {  
  11.         return "upload";  
  12.     }  
  13.       
  14.     /** 
  15.      * 上传文件 用@RequestParam注解来指定表单上的file为MultipartFile  
  16.      * @param multipartfile 
  17.      * @return 
  18.      * @throws IOException  
  19.      */  
  20.     @RequestMapping(value = "/uploadId")  
  21.     @ResponseBody  
  22.     public ResponseEntity<byte[]> idIdentification(@RequestParam("idPic") MultipartFile multipartfile) throws IOException {  
  23.         System.out.println("getOriginalFilename:"+multipartfile.getOriginalFilename());  
  24.         System.out.println("getName:"+multipartfile.getName());  
  25.         // 设置格式,图片  
  26.         HttpHeaders headers = new HttpHeaders();  
  27.         headers.setContentType(MediaType.IMAGE_JPEG);  
  28.           
  29.         //保存文件到临时目录  
  30.         String savePath = request.getSession().getServletContext().getRealPath("/")  
  31.                 + "/uploadTempDirectory/" + multipartfile.getOriginalFilename();  
  32.         File saveFile = new File(savePath);  
  33.         multipartfile.transferTo(saveFile);  
  34.         //页面显示用户上传的图片  
  35.         return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(saveFile), headers, HttpStatus.OK);  
  36.     }  

到此基本的文件上传就结束了。

多文件上传:多文件上传其实很简单,和上传其他相同的参数如checkbox一样,表单中使用相同的名称,然后action中将MultipartFile参数类定义为数组就可以。
接下来实现:
1、创建一个上传多文件的表单:

[html] view plain copy
  1. <form action="multiUploadId" method="post" enctype="multipart/form-data">  
  2.     <input type="file" name="idPic" />  
  3.     <input type="file" name="idPic" />  
  4.     <input type="file" name="idPic" />  
  5.     <button >Submit</button>  
  6. </form>  

二、创建一个简单的上传表单:

[html] view plain copy
  1. <form action="uploadId" method="post" enctype="multipart/form-data">  
  2.         <input type="file" name="idPic" />  
  3.         <button >Submit</button>  
  4.     </form>  
注意:要在form标签中加上enctype="multipart/form-data"表示该表单是要处理文件的,这是最基本的东西,很多人会忘记然而当上传出错后则去找程序的错误,却忘了这一点

三、编写上传控制类

1、创建一个控制类: FileUploadController,一个返回提交文件的页面
2、编写提交表单的action:
3、使用SpringMVC注解RequestParam来指定表单中的idPic参数;
4、指定一个用于保存文件的web项目路径
5、通过MultipartFile的transferTo(File dest)这个方法来转存文件到指定的路径。MultipartFile转存后,无法再操作,会报错

[java] view plain copy
  1. <span style="white-space:pre">    </span>//通过Spring的autowired注解获取spring默认配置的request  
  2.     @Autowired  
  3.     private HttpServletRequest request;  
  4.   
  5. <span style="white-space:pre">    </span>/** 
  6.      * 跳转到上传文件的页面 
  7.      * @return 
  8.      */  
  9.     @RequestMapping(value = "/uploadPage")  
  10.     public String uploadPage() {  
  11.         return "upload";  
  12.     }  
  13.       
  14.     /** 
  15.      * 上传文件 用@RequestParam注解来指定表单上的file为MultipartFile  
  16.      * @param multipartfile 
  17.      * @return 
  18.      * @throws IOException  
  19.      */  
  20.     @RequestMapping(value = "/uploadId")  
  21.     @ResponseBody  
  22.     public ResponseEntity<byte[]> idIdentification(@RequestParam("idPic") MultipartFile multipartfile) throws IOException {  
  23.         System.out.println("getOriginalFilename:"+multipartfile.getOriginalFilename());  
  24.         System.out.println("getName:"+multipartfile.getName());  
  25.         // 设置格式,图片  
  26.         HttpHeaders headers = new HttpHeaders();  
  27.         headers.setContentType(MediaType.IMAGE_JPEG);  
  28.           
  29.         //保存文件到临时目录  
  30.         String savePath = request.getSession().getServletContext().getRealPath("/")  
  31.                 + "/uploadTempDirectory/" + multipartfile.getOriginalFilename();  
  32.         File saveFile = new File(savePath);  
  33.         multipartfile.transferTo(saveFile);  
  34.         //页面显示用户上传的图片  
  35.         return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(saveFile), headers, HttpStatus.OK);  
  36.     }  

到此基本的文件上传就结束了。

多文件上传:多文件上传其实很简单,和上传其他相同的参数如checkbox一样,表单中使用相同的名称,然后action中将MultipartFile参数类定义为数组就可以。
接下来实现:
1、创建一个上传多文件的表单:

[html] view plain copy
  1. <form action="multiUploadId" method="post" enctype="multipart/form-data">  
  2.     <input type="file" name="idPic" />  
  3.     <input type="file" name="idPic" />  
  4.     <input type="file" name="idPic" />  
  5.     <button >Submit</button>  
  6. </form>  

2、编写处理表单的action:[java] view plain copy
  1. <span style="white-space:pre">    </span>/** 
  2.      * 多文件上传 
  3.      * @param multipartfiles 
  4.      * @return 
  5.      * @throws IllegalStateException 
  6.      * @throws IOException 
  7.      */  
  8.     @RequestMapping(value = "/multiUploadId")  
  9.     public String multiUpload(@RequestParam("idPic") MultipartFile[] multipartfiles)   
  10.             throws IllegalStateException, IOException {  
  11.         //保存文件的目录  
  12.         String savePath = request.getSession().getServletContext().getRealPath("/") + "/uploadTempDirectory/";  
  13.         if(null != multipartfiles && multipartfiles.length > 0){  
  14.             //遍历并保存文件  
  15.             for(MultipartFile file : multipartfiles){  
  16.                 file.transferTo(new File(savePath + file.getOriginalFilename()));  
  17.             }  
  18.         }  
  19.         return "redirect:uploadPage";  
  20.     }  

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: