Spring mvc系列七之 文件上传

springMVC默认的解析器里面是没有加入对文件上传的解析的,使用springmvc对文件上传的解析器来处理文件上传的时需要用springmvc提供的MultipartResolver的申明,又因为CommonsMultipartResolver实现了MultipartResolver接口,所以我们可以在springmvc配置文件中这样配置:

 

Xml代码   收藏代码
  1. <bean id="multipartResolver"  
  2.         class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
  3.         <property name="defaultEncoding" value="utf-8" />  
  4.         <property name="maxUploadSize" value="10485760000" />  
  5.         <property name="maxInMemorySize" value="40960" />  
  6.     </bean>  

 

首先引入文件上传所需要的包,commons-logging-*.jar commons-io-*.jar  commons-fileupload-*.jar

新建一个JSP页面.

Html代码   收藏代码
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  7. <title>文件上传</title>  
  8. </head>  
  9. <body>  
  10.     <%--<form action="user/fileUpload" method="post" enctype="multipart/form-data">--%>  
  11.     <form action="user/fileUpload" method="post" enctype="multipart/form-data">  
  12.         <input type="file" name="fileUpload" />  
  13.         <input type="submit" value="上传" />  
  14.     </form>  
  15. </body>  
  16. </html>  

 

 springmvc上传文件的形式有很多,这里我介绍两种.

 

第一种,看Controller

Java代码   收藏代码
  1. package gd.hz.springmvc.controller;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5.   
  6. import org.springframework.stereotype.Controller;  
  7. import org.springframework.web.bind.annotation.RequestMapping;  
  8. import org.springframework.web.bind.annotation.RequestMethod;  
  9. import org.springframework.web.bind.annotation.RequestParam;  
  10. import org.springframework.web.multipart.commons.CommonsMultipartFile;  
  11. import org.springframework.web.servlet.ModelAndView;  
  12.   
  13. @Controller("userController")  
  14. @RequestMapping("user")  
  15. public class UserController {  
  16.   
  17.     // 处理文件上传一  
  18.     @RequestMapping(value = "fileUpload", method = RequestMethod.POST)  
  19.     public ModelAndView fileUpload(  
  20.             @RequestParam("fileUpload") CommonsMultipartFile file) {  
  21.         // 获取文件类型  
  22.         System.out.println(file.getContentType());  
  23.         // 获取文件大小  
  24.         System.out.println(file.getSize());  
  25.         // 获取文件名称  
  26.         System.out.println(file.getOriginalFilename());  
  27.   
  28.         // 判断文件是否存在  
  29.         if (!file.isEmpty()) {  
  30.             String path = "D:/" + file.getOriginalFilename();  
  31.             File localFile = new File(path);  
  32.             try {  
  33.                 file.transferTo(localFile);  
  34.             } catch (IllegalStateException e) {  
  35.                 e.printStackTrace();  
  36.             } catch (IOException e) {  
  37.                 e.printStackTrace();  
  38.             }  
  39.         }  
  40.         return new ModelAndView("dataSuccess");  
  41.     }  
  42. }  

类CommonsMultipartFile为我们提供了许多对文件处理的方法.例如文件大小,上传文件名称,文件类型,具体用法可以查看spring的文档.transferTo就是将文件输出到指定地方.

 

文件上传的第二种方法,这种方法比较常用:

Java代码   收藏代码
  1. package gd.hz.springmvc.controller;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5. import java.util.Iterator;  
  6.   
  7. import javax.servlet.http.HttpServletRequest;  
  8.   
  9. import org.springframework.stereotype.Controller;  
  10. import org.springframework.web.bind.annotation.RequestMapping;  
  11. import org.springframework.web.bind.annotation.RequestMethod;  
  12. import org.springframework.web.multipart.MultipartFile;  
  13. import org.springframework.web.multipart.MultipartHttpServletRequest;  
  14. import org.springframework.web.multipart.commons.CommonsMultipartResolver;  
  15.   
  16. @Controller("userController")  
  17. @RequestMapping("user")  
  18. public class UserController {  
  19.   
  20.     // 处理文件上传二  
  21.     @RequestMapping(value = "fileUpload2", method = RequestMethod.POST)  
  22.     public String fileUpload2(HttpServletRequest request)  
  23.             throws IllegalStateException, IOException {  
  24.         // 设置上下方文  
  25.         CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(  
  26.                 request.getSession().getServletContext());  
  27.   
  28.         // 检查form是否有enctype="multipart/form-data"  
  29.         if (multipartResolver.isMultipart(request)) {  
  30.             MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;  
  31.   
  32.             Iterator<String> iter = multiRequest.getFileNames();  
  33.             while (iter.hasNext()) {  
  34.   
  35.                 // 由CommonsMultipartFile继承而来,拥有上面的方法.  
  36.                 MultipartFile file = multiRequest.getFile(iter.next());  
  37.                 if (file != null) {  
  38.                     String fileName = "demoUpload" + file.getOriginalFilename();  
  39.                     String path = "D:/" + fileName;  
  40.   
  41.                     File localFile = new File(path);  
  42.                     file.transferTo(localFile);  
  43.                 }  
  44.   
  45.             }  
  46.         }  
  47.         return "dataSuccess";  
  48.     }  
  49. }  

 MultipartHttpServletRequest提供了更加灵活的方法,可以获取多个文件和文件名,可以遍历获得每个文件.

 

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值