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 ...
随机推荐
- 2016动作短片《全境封锁:特工起源》HD720P.英语中字
导演: 德文·格雷厄姆主演: Matt Lynch / Sasha Andreev / Amanda Day类型: 动作 / 短片制片国家/地区: 美国语言: 英语上映日期: 2016-01-19片长 ...
- python多进程共享变量Value使用tips
前言: 在使用tornado的多进程时,需要多个进程共享一个状态变量,于是考虑使用multiprocessing.Value(对于该变量的具体细节请查阅相关资料).在根据网上资料使用Value时,由于 ...
- iOS开发UI篇—popoverController简单介绍(ipad)
一.简单介绍 1.什么是UIPopoverController 是iPad开发中常见的一种控制器(在iPhone上不允许使用) 跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIVi ...
- 20145222黄亚奇《Java程序设计》第3周学习总结
学号 <Java程序设计>第X周学习总结 教材学习内容总结 第四章: 类是对象的设计图,对象是类的实例. 参考名称与对象数据成员同名时,可以在数据成员前使用this区别. =是用在指定参考 ...
- MFC中对话框类(Dialog)的应用
转载http://hi.baidu.com/jackywdx/item/feee8041d2c2e12310ee1e85 Windows应用程序通常是通过对话框接收用户输入.向用户输出信息,本节介绍应 ...
- Windows 2008如何绑定MAC防范ARP攻击!
Windows 2008如何绑定MAC防范ARP攻击! 阅读(1974)暂无评论时间:2010-11-23 22:52:13 在Windows server 2003时代,通过arp 这命令即 ...
- Gt9xx芯片,在规格书+Linux驱动的基础上,移植为USB裸机经验。直接用开发板,不去碰硬件的坑。
1,用内核代码和规格书来印证数据格式: //命令3字节,IC地址 u8 end_cmd[] = {GTP_READ_COOR_ADDR >> , GTP_READ_COOR_ADDR &a ...
- 推荐一个 angular 图像加载插件
推荐一个简单的 Angular 图片加载插件:vgSrc,插件根据图片资源的不同加载状态,显示不同图片,亲测兼容IE-8. 使用 推荐使用 bower 加载: bash bower install v ...
- DOM(五)事件对象
浏览器中的事件都是以对象的形式存在的,同样ie浏览器与标准dom浏览器之间存在获取事件对象上也存在差别.在ie浏览器中事件对象是windows对象的一个属性event,访问通常采用如下方法. oP.o ...
- AJAX(二)AJAX框架
上文(AJAX(一)AJAX的简介和基础)对ajax异步请求服务器做了详细的介绍和基础应用,可以看出,ajax的一些过程是相对不变的.不必要每次发送请求都写一遍发送代码,一些ajax开发人员已经把他们 ...