spring支持在网络应用程序处理文件上传,提供拔插的org.springframework.web.multipart.MultipartResolver对象。
两个jar包:
1、com.springsource.org.apache.commons.fileupload-1.2.0.jar
2、com.springsource.org.apache.commons-io-1.4.0.jar
处理方法:
1.添加上传拦截,可指定上传的大小
<!-- 上传拦截,如最大上传值及最小上传值 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- one of the properties available; the maximum file size in bytes -->
<property name="maxUploadSize" value="100000" />
</bean>
2.添加java后台处理的API
@RequestMapping(value = "/form", method = RequestMethod.POST)
public String handleFormUpload(@RequestParam("name") String name,
@RequestParam("file") MultipartFile file) {
if (!file.isEmpty()) {
byte[] bytes = file.getBytes();
// 去理上传写文件代码
}
具体操作:
FileUploadController.java文件
package
org.spring.mvc.upload;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.spring.mvc.HelloWorldController;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
/**
* 上传文件
* @author chenyw
*
*/
@Controller
@RequestMapping(value = "/toFileUpload")
public class FileUploadController {
private Logger logger = LoggerFactory.getLogger(HelloWorldController. class);
/**
* 单文件上传
* @param name @RequestParam 取得name字段的值
* @param file 文件
* @return
* @throws IOException
*/
@RequestMapping(value = "/oneFileUpload", method = RequestMethod.POST)
public String handleFormUpload(@RequestParam( "name")
String name, @RequestParam( "file")
MultipartFile file) throws IOException {
logger.info( "name:" +name);
logger.info( "上传文件:" +file.getOriginalFilename());
if ( !file.isEmpty()) {
this.copyFile(file.getInputStream(), file.getOriginalFilename());
}
return "fileUpload/success";
}
/**
* 多文件上传
* @param request
* @param name
* @return
* @throws Exception
*/
@RequestMapping(value = "/multipartFileUpload",method = RequestMethod.POST)
public String upload2(
MultipartHttpServletRequest request ,
@RequestParam( "name") String name // 页面上的控件值
) throws Exception {
List <MultipartFile > files = request.getFiles( "file");
for( int i = 0; i <files.size() ;i ++){
if( ! files.get(i).isEmpty()) {
logger.info( "上传文件:" +files.get(i).getOriginalFilename());
this.copyFile(files.get(i).getInputStream(), files.get(i).getOriginalFilename());
}
}
logger.info( "success");
return "fileUpload/success";
}
/**
* 写文件到本地
* @param in
* @param fileName
* @throws IOException
*/
private void copyFile(InputStream in,String fileName) throws IOException{
FileOutputStream fs = new FileOutputStream( "d:/upload/"
+ fileName);
byte[] buffer = new byte[ 1024 * 1024];
int bytesum = 0;
int byteread = 0;
while ((byteread = in.read(buffer)) != - 1) {
bytesum += byteread;
fs.write(buffer, 0, byteread);
fs.flush();
}
fs.close();
in.close();
}
}
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.spring.mvc.HelloWorldController;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
/**
* 上传文件
* @author chenyw
*
*/
@Controller
@RequestMapping(value = "/toFileUpload")
public class FileUploadController {
private Logger logger = LoggerFactory.getLogger(HelloWorldController. class);
/**
* 单文件上传
* @param name @RequestParam 取得name字段的值
* @param file 文件
* @return
* @throws IOException
*/
@RequestMapping(value = "/oneFileUpload", method = RequestMethod.POST)
public String handleFormUpload(@RequestParam( "name")
String name, @RequestParam( "file")
MultipartFile file) throws IOException {
logger.info( "name:" +name);
logger.info( "上传文件:" +file.getOriginalFilename());
if ( !file.isEmpty()) {
this.copyFile(file.getInputStream(), file.getOriginalFilename());
}
return "fileUpload/success";
}
/**
* 多文件上传
* @param request
* @param name
* @return
* @throws Exception
*/
@RequestMapping(value = "/multipartFileUpload",method = RequestMethod.POST)
public String upload2(
MultipartHttpServletRequest request ,
@RequestParam( "name") String name // 页面上的控件值
) throws Exception {
List <MultipartFile > files = request.getFiles( "file");
for( int i = 0; i <files.size() ;i ++){
if( ! files.get(i).isEmpty()) {
logger.info( "上传文件:" +files.get(i).getOriginalFilename());
this.copyFile(files.get(i).getInputStream(), files.get(i).getOriginalFilename());
}
}
logger.info( "success");
return "fileUpload/success";
}
/**
* 写文件到本地
* @param in
* @param fileName
* @throws IOException
*/
private void copyFile(InputStream in,String fileName) throws IOException{
FileOutputStream fs = new FileOutputStream( "d:/upload/"
+ fileName);
byte[] buffer = new byte[ 1024 * 1024];
int bytesum = 0;
int byteread = 0;
while ((byteread = in.read(buffer)) != - 1) {
bytesum += byteread;
fs.write(buffer, 0, byteread);
fs.flush();
}
fs.close();
in.close();
}
}
单文件上传页面oneFileUpload.jsp
<
%@ page language
=
"java"
import
=
"java.util.*"
pageEncoding
=
"GBK"
%
>
< %
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 'oneFileUpload.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" >
< ! --
<link rel = "stylesheet" type = "text/css" href = "styles.css" >
-- >
< /head >
<body >
This is my onefileUpload page. <br >
<form method = "POST" action = "toFileUpload/oneFileUpload" enctype = "multipart/form-data" >
<input type = "text" name = "name" / >
<input type = "file" name = "file" / >
<input type = "submit" / >
< /form >
< /body >
< /html >
< %
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 'oneFileUpload.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" >
< ! --
<link rel = "stylesheet" type = "text/css" href = "styles.css" >
-- >
< /head >
<body >
This is my onefileUpload page. <br >
<form method = "POST" action = "toFileUpload/oneFileUpload" enctype = "multipart/form-data" >
<input type = "text" name = "name" / >
<input type = "file" name = "file" / >
<input type = "submit" / >
< /form >
< /body >
< /html >
多文件上传页面multipartFileUpload.jsp
<
%@ page language
=
"java"
import
=
"java.util.*"
pageEncoding
=
"GBK"
%
>
< %
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 'multipartFileUpload.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" >
< ! --
<link rel = "stylesheet" type = "text/css" href = "styles.css" >
-- >
< /head >
<body >
This is multipartFileUpload page. <br >
<form method = "POST" action = "toFileUpload/multipartFileUpload" enctype = "multipart/form-data" >
<input type = "text" name = "name" / > <br >
<input type = "file" name = "file" / > <br >
<input type = "file" name = "file" / > <br >
<input type = "submit" / > <br >
< /form >
< /body >
< /html >
< %
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 'multipartFileUpload.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" >
< ! --
<link rel = "stylesheet" type = "text/css" href = "styles.css" >
-- >
< /head >
<body >
This is multipartFileUpload page. <br >
<form method = "POST" action = "toFileUpload/multipartFileUpload" enctype = "multipart/form-data" >
<input type = "text" name = "name" / > <br >
<input type = "file" name = "file" / > <br >
<input type = "file" name = "file" / > <br >
<input type = "submit" / > <br >
< /form >
< /body >
< /html >