spring mvc文件上传和下载
首先要导入2个包(上传文件包和io的包)
aaarticlea/png;base64,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" alt="" />
配置文件spring-servlet.xml文件中
<!-- 配置文件上传MultipartResolver -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="5000000"></property>
</bean>
如果id="multipartResolver"没传,就会报以下的错(小心小心)
Request processing failed; nested exception is java.lang.IllegalArgumentException: Expected MultipartHttpServletRequest: is a MultipartResolver configured?
添加文件的显示页面add.sjp
a、enctype="multipart/form-data"这句就是告诉,要添加文件,很重要
b、 attach:<input type="file" name="attach"><br/>
<form:form modelAttribute="user" method="post" enctype="multipart/form-data">
ID:<form:input path="id"/><br/>
userName:<form:input path="userName"/><form:errors path="userName"/><br/>
password:<form:input path="password"/><form:errors path="password"/><br/>
email:<form:input path="email"/><form:errors path="email"/><br/>
attach:<input type="file" name="attach"><br/>
<input type="submit" value="提交"/>
</form:form>
修改添加的方法
a、指定路径
b、上传文件,就要文件保存的目标位置
@RequestMapping(value="/add",method=RequestMethod.POST)
public String add(@Validated User user,BindingResult bindingResult,MultipartFile attach,HttpServletRequest request){
//上传文件就是要上传的路径所以就需要request对象
if(bindingResult.hasErrors()){
return "user/add";
}
//指定上传位置
String uploadFilePath = request.getSession().getServletContext().getRealPath("statics/upload");
System.out.println(uploadFilePath); System.out.println(attach.getOriginalFilename());//原始名
System.out.println(attach.getContentType());//类型
System.out.println(attach.getName());//页面表单控件name的值 if(!attach.isEmpty()){
try {
//"/" 更换成自动识别分隔符File.separator
File saveFile = new File(uploadFilePath+File.separator+attach.getOriginalFilename());
//第一个是拿到输入流,第二个参数是保存到哪里
FileUtils.copyInputStreamToFile(attach.getInputStream(), saveFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//把user对象放进去key(id)
userList.put(user.getId(), user); // return "user/userlist";//返回到逻辑视图名
//(添加后,不能把添加过的数据展示出来)服务器端行为
return "redirect:/user/list";//客户端重新发送请求(把添加进去的展示出来)
}
多文件的上传
因为是多文件所以一定要加@RequestParam不加的话报如下异常
//Could not instantiate bean class [[Lorg.springframework.web.multipart.MultipartFile;]: No default constructor found;nested exception is java.lang
//不能实例化bean类[[Lorg.springframework.web.multipart。MultipartFile;]:没有默认构造函数发现,嵌套异常. lang。
//页面500
//文件上传(多文件)
@RequestMapping(value="/add",method=RequestMethod.POST)
public String add(@Validated User user,BindingResult bindingResult,@RequestParam("attachs") MultipartFile[] attachs,HttpServletRequest request){
//上传文件就是要上传的路径所以就需要request对象
if(bindingResult.hasErrors()){
return "user/add";
}
//指定上传位置
String uploadFilePath = request.getSession().getServletContext().getRealPath("statics/upload");
try {
for(MultipartFile attach:attachs){ if(!attach.isEmpty()){ //"/" 更换成自动识别File.separator
File saveFile = new File(uploadFilePath+File.separator+attach.getOriginalFilename());
//第一个是拿到输入流,第二个参数是保存到哪里
FileUtils.copyInputStreamToFile(attach.getInputStream(), saveFile);
}
}
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//把user对象放进去key(id)
userList.put(user.getId(), user); // return "user/userlist";//返回到逻辑视图名
//(添加后,不能把添加过的数据展示出来)服务器端行为
return "redirect:/user/list";//客户端重新发送请求(把添加进去的展示出来)
}
因为多文件是一个数组,attach:<input type="file" name="attachs"><br/>
这边的name要是attachs,否则就找不到
<form:form modelAttribute="user" method="post" enctype="multipart/form-data">
ID:<form:input path="id"/><br/>
userName:<form:input path="userName"/><form:errors path="userName"/><br/>
password:<form:input path="password"/><form:errors path="password"/><br/>
email:<form:input path="email"/><form:errors path="email"/><br/>
attach:<input type="file" name="attachs"><br/>
attach1:<input type="file" name="attachs"><br/>
attach2:<input type="file" name="attachs"><br/>
<input type="submit" value="提交"/>
</form:form>
spring mvc文件上传和下载的更多相关文章
- MVC文件上传与下载
MVC文件上传与下载 MVC文件上传与下载 想想自己从毕业到工作也有一年多,以前公司的任务的比较重,项目中有的时候需要用到什么东西都去搜索一下,基础知识感觉还没有以前在学校中的好.最近开始写博客,真的 ...
- Spring MVC 笔记 —— Spring MVC 文件上传
文件上传 配置MultipartResolver <bean id="multipartResolver" class="org.springframework.w ...
- Spring MVC文件上传教程 commons-io/commons-uploadfile
Spring MVC文件上传教程 commons-io/commons-uploadfile 用到的依赖jar包: commons-fileupload 1.3.1 commons-io 2.4 基于 ...
- 【Java Web开发学习】Spring MVC文件上传
[Java Web开发学习]Spring MVC文件上传 转载:https://www.cnblogs.com/yangchongxing/p/9290489.html 文件上传有两种实现方式,都比较 ...
- Spring mvc文件上传实现
Spring mvc文件上传实现 jsp页面客户端表单编写 三个要素: 1.表单项type="file" 2.表单的提交方式:post 3.表单的enctype属性是多部分表单形式 ...
- spring boot文件上传、下载
主题:Spring boot 文件上传(多文件上传)[从零开始学Spring Boot]http://www.iteye.com/topic/1143595 Spring MVC实现文件下载http: ...
- Spring mvc 文件上传到文件夹(转载+心得)
spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方1.form的enctype=”multipart/form-data” 这个是上传文件必须的2.applicationConte ...
- spring mvc 文件上传 ajax 异步上传
异常代码: 1.the request doesn't contain a multipart/form-data or multipart/mixed stream, content type he ...
- Spring MVC文件上传下载(转载)
原文地址: http://www.cnblogs.com/WJ-163/p/6269409.html 上传参考 http://www.cnblogs.com/lonecloud/p/5990060.h ...
随机推荐
- ZooKeeper学习第八期——ZooKeeper伸缩性
一.ZooKeeper中Observer 1.1 ZooKeeper角色 经过前面的介绍,我想大家都已经知道了在ZooKeeper集群当中有两种角色Leader和Follower.Leader可以接受 ...
- Android强制弹出,隐藏输入法.
当我们弹出一个Dialog时候,如果这个Dialog需要输入数据,然后确定后又需要关闭输入法,一般系统的hide,跟show方法总会有各种问题,最霸道的解决方法就是写一个定时器,定时弹出或者关闭输入法 ...
- VS2010报错无法编译:LINK : fatal error LNK1123: failure during conversion to COFF: file invalid
win7 64位 专业版 + vs2010 从vc6.0下转过来的一个项目,突然遇到这个问题. 解决方案: 用C:\Windows\winsxs\x86_netfx-cvtres_for_vc_and ...
- 信息安全系统设计基础exp_2
详见搭档20135322郑伟博客,链接如下:http://www.cnblogs.com/zhengwei0712/p/4971435.html
- IOS-一步一步教你自定义评分星级条RatingBar ——转载的
由于项目的需要,需要设计能评分.能显示评分数据的星级评分条,但是IOS上好像没有这个控件,Android是有RatingBar这个控件的(又发现一个IOS不如Android好的),那就只能自定义了,在 ...
- Opencv step by step - 阈值化
Opencv里面的阈值化做起来比较简单,只需要一个函数即可: /* Applies fixed-level threshold to grayscale image. This is a basic ...
- SQL脚本循环修改数据库字段类型
数据库在设计的时候也许考虑不全面,导致某些字段类型不太准确.比如设计的时候是varchar(1024),但是实际使用的时候却发现太小了,装不下,于是需要修改字段类型为ntext什么的. 我最近就遇到了 ...
- java内存优化牛刀小试
小猿做了两年的c++,上个月竟然被调到java项目,于是第一篇随笔就想八一八java的内存优化. 首先优化这种事,肯定是应该放到最后去做的,不过在写代码的过程中养成良好的习惯也是很重要的.在这里先推荐 ...
- 4G时代的抢钱之道
最近最大的事件恐怕就是移动的4G上线了,50元600M起计价,上网速度最高理论到达100Mbps,相当于一秒下载10MB的数据,或者是一分钟下载一张VCD(600M)电影. 当然,对于这样的流量套餐, ...
- 字符串去掉空格 trim()方法
jquery库提供了$.trim()方法,能直接用, 但没用库时FF里有效果,IE里就没实现, 解决办法:用正则替换 方法: function trimStr(str){return str.repl ...