首先要导入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文件上传和下载的更多相关文章

  1. MVC文件上传与下载

    MVC文件上传与下载 MVC文件上传与下载 想想自己从毕业到工作也有一年多,以前公司的任务的比较重,项目中有的时候需要用到什么东西都去搜索一下,基础知识感觉还没有以前在学校中的好.最近开始写博客,真的 ...

  2. Spring MVC 笔记 —— Spring MVC 文件上传

    文件上传 配置MultipartResolver <bean id="multipartResolver" class="org.springframework.w ...

  3. Spring MVC文件上传教程 commons-io/commons-uploadfile

    Spring MVC文件上传教程 commons-io/commons-uploadfile 用到的依赖jar包: commons-fileupload 1.3.1 commons-io 2.4 基于 ...

  4. 【Java Web开发学习】Spring MVC文件上传

    [Java Web开发学习]Spring MVC文件上传 转载:https://www.cnblogs.com/yangchongxing/p/9290489.html 文件上传有两种实现方式,都比较 ...

  5. Spring mvc文件上传实现

    Spring mvc文件上传实现 jsp页面客户端表单编写 三个要素: 1.表单项type="file" 2.表单的提交方式:post 3.表单的enctype属性是多部分表单形式 ...

  6. spring boot文件上传、下载

    主题:Spring boot 文件上传(多文件上传)[从零开始学Spring Boot]http://www.iteye.com/topic/1143595 Spring MVC实现文件下载http: ...

  7. Spring mvc 文件上传到文件夹(转载+心得)

    spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方1.form的enctype=”multipart/form-data” 这个是上传文件必须的2.applicationConte ...

  8. spring mvc 文件上传 ajax 异步上传

    异常代码: 1.the request doesn't contain a multipart/form-data or multipart/mixed stream, content type he ...

  9. Spring MVC文件上传下载(转载)

    原文地址: http://www.cnblogs.com/WJ-163/p/6269409.html 上传参考 http://www.cnblogs.com/lonecloud/p/5990060.h ...

随机推荐

  1. Android开发环境搭建及常见问题解决方法

    转自: http://www.cnblogs.com/rwxwsblog/p/4769785.html 在移动互联网的时代,Android的份额早已超过了苹果.Android的出现无疑加速了移动互联网 ...

  2. IOS开发之——Masonry 只支持OC,暂不支持swift

    前言 1 MagicNumber -> autoresizingMask -> autolayout 以上是纯手写代码所经历的关于页面布局的三个时期 在iphone1-iphone3gs时 ...

  3. 记录毕业论文 LanguageTool 二次开发时用到的网站

    LanguageTool Development LanguageTool Supported Languages Share your knowledge about LT - LanguageTo ...

  4. HTML5 中canvas支持触摸屏的签名面板

    1.前言 最近实在是太忙了,从国庆之后的辞职,在慢慢的找工作,到今天在现在的这家公司上班大半个月了,太多的心酸泪无以言表,面试过程中,见到的坑货公司是一家又一家,好几家公司自己都只是上一天班就走了,其 ...

  5. IDEA SSH

    被IDEA各种虐0.0各种配置,没有人教就百度,别人也弄了点,然后整整花了一天,从eclipse转到IDEA真的不容易啊TT

  6. RVM 解决 Ruby 的版本问题

    RVM 是一个命令行工具,可以提供一个便捷的多版本 Ruby 环境的管理和切换. RVM 的官网是 https://rvm.io/. 如果你打算学习 Ruby / Rails, RVM 是必不可少的工 ...

  7. 斯坦福机器学习实现与分析之八(kmeans算法)

    Kmeans算法简介 作为无监督学习领域的一种简单的算法,Kmeans在实际应用中却是相当广泛的.其过程是通过不断交替迭代求得最优的类中心以及每个样本所属类别,具体步骤如下: 确定类别个数k 随机初始 ...

  8. XP明年就被停止技术支持,这会带来什么?谈谈如何做决策

    XP是MS的一款老牌操作系统,相信大家都不陌生,甚至还有继续使用的人,当然了,在虚拟机里用它也是很好用的,不过,再漂亮的姑娘,也有嫁人的时候,作为XP的父母,MS微软明年四月将停止支持有十多年历史的 ...

  9. Quartz.net的cron表达式

    写在前面 前面有一篇文章用到了quartz.net,在设置定时时间的时候,使用了cron表达式,这里记录几种常见设置方式,方便对照使用. 详情 在这篇文章:Quartz.Net在windows服务中的 ...

  10. 【Moqui框架】Moqui连接各种类型的数据库

    Moqui连接mysql数据库 各种数据库的连接文本: -- Derby<datasource group-name="transactional" database-con ...