我是在已经搭建好的springMVC环境下,maven工程中的pom.xml所需要的jar包(其中spring上传文件的两个主要jar:commons-fileupload.jar和commons-io.jar):
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.zhihuagroupId>
<artifactId>SpringMVC_FileUploadartifactId>
<packaging>warpackaging>
<version>0.0.1-SNAPSHOTversion>
<name>SpringMVC_FileUpload Maven Webappname>
<url>http://maven.apache.orgurl>
<properties>
<spring.version>3.2.8.RELEASEspring.version>
<junit.version>4.10junit.version>
properties>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>3.8.1version>
<scope>testscope>
dependency>
<dependency>
<groupId>commons-fileuploadgroupId>
<artifactId>commons-fileuploadartifactId>
<version>1.3.1version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-coreartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-context-supportartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-aopartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-aspectsartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-txartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-testartifactId>
<version>${spring.version}version>
<scope>testscope>
dependency>
<dependency>
<groupId>jstlgroupId>
<artifactId>jstlartifactId>
<version>1.2version>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.0.1version>
<scope>providedscope>
dependency>
<dependency>
<groupId>javax.servlet.jspgroupId>
<artifactId>jsp-apiartifactId>
<version>2.1version>
<scope>providedscope>
dependency>
dependencies>
<build>
<finalName>SpringMVC_FileUploadfinalName>
build>
project>
在spring-mvc.xml中添加代码:
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8">property>
<property name="maxUploadSize" value="10485760000">property>
<property name="maxInMemorySize" value="40960">property>
bean>
前端页面(fileUpload.jsp)和上传成功返回页面(success.jsp):
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>springmvc-文件上传title>
head>
<body>
<h1>采用流的方式上传文件h1>
<form name="form1" action=" " method="post" enctype="multipart/form-data">
<input type="file" name="file_01"/>
<input type="submit" value="fileupload"/>
form>
<br>
<h1>采用multipart提供的file.transfer方法上传文件1h1>
<form name="form2" action=" " method="post" enctype="multipart/form-data">
<input type="file" name="file_02"/>
<input type="submit" value="fileupload"/>
form>
<br>
<h1>采用multipart提供的file.transfer方法上传文件2h1>
<form name="form2" action=" " method="post" enctype="multipart/form-data">
<input type="file" name="file_03"/>
<input type="submit" value="fileupload"/>
form>
<br>
<h1>使用spring MVC提供的方法上传文件h1>
<form name="form2" action=" " method="post" enctype="multipart/form-data">
<input type="file" name="file_03"/>
<input type="submit" value="fileupload"/>
form>
body>
html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
<h2>文件上传成功!h2>
body>
html>
controller 的代码:
package com.zhihua.controller;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.Iterator;
import javax.servlet.http.HttpServletRequest;
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("/fileUpload")
public class FileUploadController {
/**
* 通过流的方式上传文件
* @RequestParam("file") 将name=file控件得到的文件封装成CommonsMultipartFile 对象
* <请替换成功能描述>
* <请替换成详细描述>
* @param file
* @return
* @author caizh
* @since [1.0.0]
* @version [1.0.0,2017年2月5日]
*/
@RequestMapping("/upload_01")
public String fileUpload_1(@RequestParam("file_01")CommonsMultipartFile file)throws IOException {
//用来检测程序运行时间
long startTime = System.currentTimeMillis();
System.out.println("fileName:"+file.getOriginalFilename());
try{
//获取输出流
OutputStream os = new FileOutputStream("E:/"+new Date().getTime()+file.getOriginalFilename());
//获取输入流CommonsMultipartFile中可以直接得到文件的流
InputStream is = file.getInputStream();
int temp;
//一个一个字节的读取并写入
while((temp=is.read())!=(-1)){
os.write(temp);
}
os.flush();
os.close();
is.close();
}catch(Exception e){
e.printStackTrace();
}
long endTime = System.currentTimeMillis();
System.out.println("方法一的运行时间:"+String.valueOf(endTime-startTime)+"ms");
return "view/success";
}
/**
* 采用file.Transto 来保存上传的文件
* <请替换成功能描述>
* <请替换成详细描述>
* @param file
* @return
* @throws IOException
* @author caizh
* @since [1.0.0]
* @version [1.0.0,2017年2月5日]
*/
@RequestMapping("/upload_02")
public String fileUpload_2(@RequestParam("file_02") CommonsMultipartFile file)throws IOException {
long startTime = System.currentTimeMillis();
System.out.println("fileName:"+file.getOriginalFilename());
String path = "E:/"+new Date().getTime()+file.getOriginalFilename();
File newFile = new File(path);
//通过CommonsMultipartFile 的方法直接写文件
file.transferTo(newFile);
long endTime = System.currentTimeMillis();
System.out.println("方法二的运行时间:"+String.valueOf(endTime-startTime)+"ms");
return "view/success";
}
/**
* 使用MultipartFile上传文件
* <请替换成功能描述>
* <请替换成详细描述>
* @param file
* @return
* @author caizh
* @since [1.0.0]
* @version [1.0.0,2017年2月5日]
*/
@RequestMapping("/upload_03")
public String fileUpload_3(@RequestParam(value="file_03",required=false)MultipartFile file,
HttpServletRequest request){
String path = request.getSession().getServletContext().getRealPath("upload");
System.out.println(path);
String fileName = file.getOriginalFilename();
File targetFile = new File(path,fileName);
if(!targetFile.exists()){
targetFile.mkdirs();
}
//保存
try {
file.transferTo(targetFile);
}catch(Exception e){
e.printStackTrace();
}
return "view/success";
}
/**
* 采用spring提供的上传文件的方法
* <请替换成功能描述>
* <请替换成详细描述>
* @param request
* @return
* @throws IllegalStateException
* @throws IOException
* @author caizh
* @since [1.0.0]
* @version [1.0.0,2017年2月5日]
*/
@RequestMapping("/upload_spring")
public String springUpload(HttpServletRequest request)throws IllegalStateException, IOException{
long startTime = System.currentTimeMillis();
//将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
//检查form中是否有enctype="multipart/form-data"
if(multipartResolver.isMultipart(request))
{
//将request变成多request
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;
//获取multiRequest中所有的文件名
Iterator iter = multiRequest.getFileNames();
while(iter.hasNext()){
//一次遍历所有的文件
MultipartFile file = multiRequest.getFile(iter.next().toString());
if(file!=null){
String path = "E:/springUpload"+file.getOriginalFilename();
//上传
file.transferTo(new File(path));
}
}
}
long endTime = System.currentTimeMillis();
System.out.println("方法三的运行时间:"+String.valueOf(endTime-startTime)+"ms");
return "view/success";
}
}
好了,全部代码都给出了,博主是测试成功了,感兴趣的朋友可以去比较不同上传方式的效率!