spring mvc 文件上传

发布时间:2017-1-19 4:06:44 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"spring mvc 文件上传 ",主要涉及到spring mvc 文件上传 方面的内容,对于spring mvc 文件上传 感兴趣的同学可以参考一下。

spring mvc 文件上传

                                                                          spring mvc 文件上传  

一、单文件上传

配置步骤:

步骤一、在配置文件中配置包扫描器(暂且这样配,会出问题,我们下面说解决方案)

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:p="http://www.springframework.org/schema/p"     xmlns:mvc="http://www.springframework.org/schema/mvc"    xmlns:context="http://www.springframework.org/schema/context"    xsi:schemaLocation="        http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context.xsd        http://www.springframework.org/schema/mvc        http://www.springframework.org/schema/mvc/spring-mvc.xsd ">      <!--让spring扫描包下所有的类,让标注spring注解的类生效  -->     <context:component-scan base-package="cn.hmy.controller"/>     </beans>

步骤二,定制我们的文件上传jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <base href="<%=basePath%>">        <title>文件上传</title>  </head>    <body>     <form action="${pageContext.request.contextPath }/list.do" method="post" enctype="multipart/form-data">       <h1>文件上传</h1>                 文件:<input type="file" name="fileUpLoad"/></br>        <input type="submit" value="上传"/>             </form>  </body></html>

步骤三、书写我们的处理器代码

package cn.hmy.controller;import java.io.File;import java.io.IOException;import javax.servlet.http.HttpSession;import org.springframework.stereotype.Controller;import org.springframework.validation.BindingResult;import org.springframework.validation.FieldError;import org.springframework.validation.annotation.Validated;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.servlet.ModelAndView;import cn.hmy.pojo.UserInfo;@Controllerpublic class MyController{       //处理器方法     @RequestMapping(value="/list.do")         public void doFirst(MultipartFile fileUpLoad,HttpSession session) throws Exception{         //1.获取文件名称         String filename = fileUpLoad.getOriginalFilename();         //2.获取文件的前半部分路径         String realPath = session.getServletContext().getRealPath("/images");         //3.拼接成完整的路径         File file=new File(realPath,filename);         //4.保存文件         fileUpLoad.transferTo(file);      }        }

此时我们启动服务器,进行代码上传,会报如下错误

解决方案:更改我们的spring-servlet.xml配置文件

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:p="http://www.springframework.org/schema/p"     xmlns:mvc="http://www.springframework.org/schema/mvc"    xmlns:context="http://www.springframework.org/schema/context"    xsi:schemaLocation="        http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context.xsd        http://www.springframework.org/schema/mvc        http://www.springframework.org/schema/mvc/spring-mvc.xsd ">      <!--让spring扫描包下所有的类,让标注spring注解的类生效  -->     <context:component-scan base-package="cn.hmy.controller"/>
<!--配置复杂类型表达解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean> </beans>

启动发现还是会报上述错误 

解决方案:配置注解驱动

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:p="http://www.springframework.org/schema/p"     xmlns:mvc="http://www.springframework.org/schema/mvc"    xmlns:context="http://www.springframework.org/schema/context"    xsi:schemaLocation="        http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context.xsd        http://www.springframework.org/schema/mvc        http://www.springframework.org/schema/mvc/spring-mvc.xsd ">      <!--让spring扫描包下所有的类,让标注spring注解的类生效  -->     <context:component-scan base-package="cn.hmy.controller"/>
<!--配置复杂类型表达解析器--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
<!--配置注解驱动-->
<mvc:annotation-driven/></beans>

如果在上述配置文件中缺少复杂类型解析器,会报如下错误

在解决了以上错误后,我们会发现如果我们上传的文件中含有中文   会出现乱码现象

解决乱码

解决方案我们暂且提供以下两种方式

方案一、

方案二、在web.xml中配置

<filter>    <filter-name>characterEncoding</filter-name>    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>    <init-param>      <param-name>encoding</param-name>      <param-value>utf-8</param-value>    </init-param>    <init-param>      <param-name>forceEncoding</param-name>      <param-value>true</param-value>    </init-param>  </filter>  <filter-mapping>    <filter-name>characterEncoding</filter-name>    <url-pattern>/*</url-pattern>  </filter-mapping>

如何控制文件上传大小

在spring-servlet.xml中配置如下

maxUploadSize为上传的总文件的大小 5M
maxInMemorySize为上传的单个文件的大小 1M
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">       <property name="defaultEncoding" value="utf-8"></property>       <property name="maxUploadSize" value="5000000"></property>       <property name="maxInMemorySize" value="1000000"></property>     </bean>

如果超出所限制的大小  会报如下错误

控制文件上传的类型(通过后缀名进行控制)在处理器中进行判定

例如 只允许上传.jpg   .png   .gif为后缀的文件

package cn.hmy.controller;import java.io.File;import java.io.IOException;import javax.servlet.http.HttpSession;import org.springframework.stereotype.Controller;import org.springframework.validation.BindingResult;import org.springframework.validation.FieldError;import org.springframework.validation.annotation.Validated;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.servlet.ModelAndView;import cn.hmy.pojo.UserInfo;@Controllerpublic class MyController{       //处理器方法     @RequestMapping(value="/list.do")         public String doFirst(MultipartFile fileUpLoad,HttpSession session) throws Exception{                          //1.获取文件名称         String filename = fileUpLoad.getOriginalFilename();         //限定文件上传的类型         if(filename.endsWith("jpg")||filename.endsWith("png")||filename.endsWith("gif")){            //2.获取文件的前半部分路径             String realPath = session.getServletContext().getRealPath("/images");             //3.拼接成完整的路径             File file=new File(realPath,filename);             //4.保存文件             fileUpLoad.transferTo(file);          }else{             System.out.println("不支持上传文件的类型");         }                  return "/list.jsp";              }        }

如何判断用户没用选上传文件

多文件上传

步骤一、

spring-servlet.xml配置文件

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:p="http://www.springframework.org/schema/p"     xmlns:mvc="http://www.springframework.org/schema/mvc"    xmlns:context="http://www.springframework.org/schema/context"    xsi:schemaLocation="        http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context.xsd        http://www.springframework.org/schema/mvc        http://www.springframework.org/schema/mvc/spring-mvc.xsd ">      <!--让spring扫描包下所有的类,让标注spring注解的类生效  -->     <context:component-scan base-package="cn.hmy.controller"/>     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">       <property name="defaultEncoding" value="utf-8"></property>       <property name="maxUploadSize" value="5000000"></property>       <property name="maxInMemorySize" value="1000000"></property>     </bean>     <mvc:annotation-driven/></beans>

步骤二、准备多文件上传的jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <base href="<%=basePath%>">        <title>文件上传</title>  </head>    <body>     <form action="${pageContext.request.contextPath }/list.do" method="post" enctype="multipart/form-data">       <h1>文件上传</h1>                 文件1:<input type="file" name="fileUpLoad"/></br>                 文件2:<input type="file" name="fileUpLoad"/></br>                 文件3:<input type="file" name="fileUpLoad"/></br>       <input type="submit" value="上传"/>             </form>  </body></html>

步骤三、编写处理器的代码

 //多文件上传     @RequestMapping(value="/list.do")         public String doFirst2(@RequestParam MultipartFile[] fileUpLoad,HttpSession session) throws Exception{         for (MultipartFile item : fileUpLoad) {             //1.获取文件名称             String filename = item.getOriginalFilename();             //限定文件上传的类型             if(filename.endsWith("jpg")||filename.endsWith("png")||filename.endsWith("gif")){                //2.获取文件的前半部分路径                 String realPath = session.getServletContext().getRealPath("/images");                 //3.拼接成完整的路径                 File file=new File(realPath,filename);                 //4.保存文件                 item.transferTo(file);              }else{                 System.out.println("不支持上传文件的类型");             }        }                          return "/list.jsp";         }

注意:在处理器方法中一定要对参数进行校对使用注解@RequestParam校正参数

丢到  会报错

即可实现多文件上传


上一篇:SQL语法中的子查询Subqueries
下一篇:Burpsuite如何抓取使用了SSL或TLS传输的 IOS App流量

相关文章

相关评论