import java.io.File;
import java.io.FileNotFoundException;
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
public class SpringMVC006 {
/*
* 通过流的方式上传文件 @RequestParam("file") 将name=file控件得到的文件封装成CommonsMultipartFile
* 对象
*/
@RequestMapping("/fileUpload")
public String fileUpload(@RequestParam("file")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 (FileNotFoundException e) {
e.printStackTrace();
}
long endTime = System.currentTimeMillis();
System.out.println("方法一的运行时间:" + String.valueOf(endTime - startTime)+ "ms");
return "/success";
}
/*
* 采用file.Transto 来保存上传的文件
*/
@RequestMapping("/fileUpload2")
public String fileUpload2(@RequestParam("file") 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 "/success";
}
/*
* 采用spring提供的上传文件的方法
*/
@RequestMapping("/springUpload")
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 "/success";
}
}
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>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
<form name="serForm" action="fileUpload.do" method="post"
enctype="multipart/form-data">
<h1>
采用流的方式上传文件
</h1>
<input type="file" name="file">
<input type="submit" value="upload" />
</form>
<form name="Form2" action="fileUpload2.do" method="post"
enctype="multipart/form-data">
<h1>
采用multipart提供的file.transfer方法上传文件
</h1>
<input type="file" name="file">
<input type="submit" value="upload" />
</form>
<form name="Form2" action="springUpload.do" method="post"
enctype="multipart/form-data">
<h1>
使用spring mvc提供的类的方法上传文件
</h1>
<input type="file" name="file">
<input type="submit" value="upload" />
</form>
</body>
</html>