SpringMVC上传文件

来源:互联网 发布:机器人软件编程 编辑:程序博客网 时间:2024/06/05 03:03

1.首先需要导入两个相关的包:


2.添加Web.xml配置文件中关于SpringMVC的配置

<!--configure the setting of springmvcDispatcherServlet and configure the mapping--><servlet>    <servlet-name>springmvc</servlet-name>    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    <init-param>          <param-name>contextConfigLocation</param-name>          <param-value>classpath:springmvc-servlet.xml</param-value>      </init-param>      <!-- <load-on-startup>1</load-on-startup> --></servlet> <servlet-mapping>    <servlet-name>springmvc</servlet-name>    <url-pattern>/</url-pattern></servlet-mapping>
3.在src下添加springmvc-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:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"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-3.0.xsd        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"><!-- scan the package and the sub package --><context:component-scan base-package="upload" /><!-- Controller文件在哪个包里就写那个 --><!-- don't handle the static resource --><mvc:default-servlet-handler /><!-- if you use annotation you must configure following setting --><mvc:annotation-driven /><!-- configure the InternalResourceViewResolver .InternalResourceViewResolver 视图名称解析器 --><!-- 静态资源访问 --><mvc:resources location="/img/" mapping="/img/**" /><mvc:resources location="/js/" mapping="/js/**" /><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"id="internalResourceViewResolver"><!-- 前缀 --><property name="prefix" value="/" /><!-- 后缀 --><property name="suffix" value=".jsp" /></bean><!-- class路径为:spring-web-3.2====org.springframework.web.multipart.commons===CommonsMultipartResolver --><bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="defaultEncoding" value="utf-8" /><property name="maxUploadSize" value="10485760000" />  <!-- 文件的最大值 --><property name="maxInMemorySize" value="40960" /><!--文件缓存大小 --></bean></beans>

4.在WebContent目录下新建一个jsp文件命名为upload.jsp,再建一个成功跳转页面success.jsp内容自定

<!-- multipart/form-data===不对字符编码,在使用包含文件上传控件的表单时,必须使用该值 --><form action="${pageContext.request.contextPath}/file/upload2"name="userForm" method="post" enctype="multipart/form-data">选择文件:<input type="file" name="file"> <input type="submit"value="上传"></form>
文件上传需要用(注意)
method="post" enctype="multipart/form-data"
5.方法代码---在springmvc-servlet.xml配置文件的解析包upload下建立UploadController.java(具体路径:/springMvcupload/src/upload/UploadController.java)

Spring通过对Servlet API的HttpServletRequest接口进行扩展,使其能够很好地处理文件上传。扩展后的接口名为org.springframework.web.multipart.MultipartHttpServletRequest

package upload;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.io.UnsupportedEncodingException;import java.net.URLDecoder;import java.util.Date;import java.util.Iterator;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest;import org.springframework.web.multipart.commons.CommonsMultipartFile;import org.springframework.web.multipart.commons.CommonsMultipartResolver;@Controller@RequestMapping("/file")public class UploadController {
//第一种方法@RequestMapping("/upload")//@RequestParam("file")---解析name="file"    CommonsMultipartFile file 声明文件类型  public String addUser(@RequestParam("file") CommonsMultipartFile file,HttpServletRequest request) throws IOException{        //打印输出上传文件的名称System.out.println("fileName---->" + file.getOriginalFilename());//如果该文件存在if(!file.isEmpty()){try {//输出流   D盘根目录下文件名称"时间戳加文件名"FileOutputStream os = new FileOutputStream("D:/" + new Date().getTime() + file.getOriginalFilename());//输入流InputStream in = file.getInputStream();//读文件(有多种方法,知识最简单的一种)int b = 0;while((b=in.read()) != -1){ //判断是否读到尾部os.write(b);}
os.flush(); os.close();in.close();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return "/success";}
//第二种方法
//优化此上方法,使传输文件速度最快@RequestMapping("/upload2")public String upload2(HttpServletRequest request,HttpServletResponse response) throws IllegalStateException, IOException{CommonsMultipartResolver multipartResolver  = new CommonsMultipartResolver(request.getSession().getServletContext());if(multipartResolver.isMultipart(request)){MultipartHttpServletRequest  multiRequest = (MultipartHttpServletRequest)request;Iterator<String>  iter = multiRequest.getFileNames();while(iter.hasNext()){MultipartFile file = multiRequest.getFile((String)iter.next());if(file != null){String fileName = "demoUpload" + file.getOriginalFilename();String path = "D:/" + fileName;File localFile = new File(path);file.transferTo(localFile);}}}return "/success";}@RequestMapping("/toUpload")public String toUpload(){return "/upload";}}