首先:前端界面Demo
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript" src="js/jquery-1.12.1.min.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
i = 1;
j = 1;
$(document).ready(function(){
$("#btn_add1").click(function(){
document.getElementById("newUpload1").innerHTML+='<div id="div_'+i+'"><input name="file" type="file" /><input type="button" value="删除" οnclick="del_1('+i+')"/></div>';
i = i + 1;
});
$("#btn_add2").click(function(){
document.getElementById("newUpload2").innerHTML+='<div id="div_'+j+'"><input name="file_'+j+'" type="file" /><input type="button" value="删除" οnclick="del_2('+j+')"/></div>';
j = j + 1;
});
});
function del_1(o){
document.getElementById("newUpload1").removeChild(document.getElementById("div_"+o));
}
function del_2(o){
document.getElementById("newUpload2").removeChild(document.getElementById("div_"+o));
}
</script>
</head>
<body>
<h1>单文件上传</h1>
<form action="./uploadOne"
method="POST" enctype="multipart/form-data">
<input type="file" name="photoFile">
<input type="text" name="phone" value="phone">
<button type="submit" value="提交">提交</button>
</form>
<h1>springMVC字节流输入上传多文件</h1>
<form name="userForm1" action="/uploadMore" enctype="multipart/form-data" method="post">
<div id="newUpload1">
<input type="file" name="file">
</div>
<input type="button" id="btn_add1" value="增加一行" >
<input type="submit" value="上传" >
</form>
<br>
<br>
<hr align="left" width="60%" color="#FF0000" size="3">
<br>
<br>
<h1>springMVC包装类上传多文件</h1>
<form name="userForm2" action="/uploadMoreGreater" enctype="multipart/form-data" method="post"">
<div id="newUpload2">
<input type="file" name="file">
</div>
<input type="button" id="btn_add2" value="增加一行" >
<input type="submit" value="上传" >
</form>
</body>
</html>
其次:后端代码逻辑
package com.iboyaa.controller;
import com.iboyaa.pojo.User;
import com.iboyaa.util.ErrorCode;
import com.iboyaa.util.String.StringIsNull;
import com.iboyaa.util.command.BaseProcess;
import com.iboyaa.util.command.ResponseCommand;
import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
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;
import redis.clients.jedis.JedisPool;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.ParseException;
import java.util.Date;
import java.util.Iterator;
/**
* @author lbh
* @version 1.0
* @date 创建时间:2017年12月19日 上午10:31:59
* @parameter
* @return
* @since
*/
@Controller
public class UploadController extends BaseProcess {
/**
* 日志.
*/
private static Logger logger = Logger.getLogger(UploadController.class);
/**
* 单文件上传
* @param photoFile
* @param responseCommand
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/uploadOne", method = RequestMethod.POST)
@ResponseBody
public ResponseCommand uploadOne(
@RequestParam(value = "photoFile", required = false) MultipartFile photoFile,
ResponseCommand responseCommand, HttpServletRequest request,
HttpServletResponse response) {
String phone = request.getParameter("phone");
try {
if (StringIsNull.isNULL(phone)) {
logger.info("手机号为空");
return returnResult(ErrorCode.ERR_CODE_STATUS_FALSE,
ErrorCode.ERR_CODE_PRECONDITION_FAILED, "uid为空", responseCommand);
} else if (photoFile.isEmpty() || photoFile == null) {
logger.info("文件未上传");
return returnResult(ErrorCode.ERR_CODE_STATUS_FALSE,
ErrorCode.ERR_CODE_PRECONDITION_FAILED, "文件未上传", responseCommand);
} else {
//绝对路径
String PMdir = request.getSession().getServletContext().getRealPath("");
String tmpfile = PMdir + "/bblImg/" + phone + "/" ;
byte[] bytes = photoFile.getBytes();
String trueFileName = photoFile.getOriginalFilename();
String dir = "/bblImg/" + phone + "/" + trueFileName;
File f = new File(tmpfile);
if (f.exists() == false) {
f.mkdirs();
}
tmpfile += trueFileName;
// 将文件上传到本地服务上去
FileOutputStream fos = new FileOutputStream(tmpfile);
// 上传到固定路径
fos.write(bytes);// 写入文件
fos.close();
File fileTrue = new File(tmpfile);
//判断是否上传附件成功
if (fileTrue.exists()) {
//上传成功,返回地址
logger.info("上传成功");
return returnResult(ErrorCode.ERR_CODE_STATUS_TRUE,
ErrorCode.ERR_CODE_SUCCESS, dir, responseCommand);
} else {
logger.info("上传失败");
return returnResult(ErrorCode.ERR_CODE_STATUS_FALSE,
ErrorCode.ERR_CODE_PRECONDITION_FAILED, "上传失败", responseCommand);
}
}
} catch (Exception e) {
logger.error("异常:" + e.getMessage());
return returnResult(ErrorCode.ERR_CODE_STATUS_FALSE,
ErrorCode.ERR_CODE_PRECONDITION_FAILED, e.getMessage(), responseCommand);
}
}
/**
* 多文件上传,使用字符流上传
* @param photoFile
* @param responseCommand
* @param request
* @param response
* @return
*/
@RequestMapping("/uploadMore")
public String uploadMore(@RequestParam("file") CommonsMultipartFile[] files, HttpServletRequest request){
for(int i = 0;i<files.length;i++){
logger.info("fileName---------->" + files[i].getOriginalFilename());
if(!files[i].isEmpty()){
int pre = (int) System.currentTimeMillis();
try {
//拿到输出流,同时重命名上传的文件
FileOutputStream os = new FileOutputStream("E:/" + new Date().getTime() + files[i].getOriginalFilename());
//拿到上传文件的输入流
FileInputStream in = (FileInputStream) files[i].getInputStream();
//以写字节的方式写文件
int b = 0;
while((b=in.read()) != -1){
os.write(b);
}
os.flush();
os.close();
in.close();
int finaltime = (int) System.currentTimeMillis();
logger.info(finaltime - pre);
} catch (Exception e) {
e.printStackTrace();
logger.info("上传出错");
}
}
}
return "/success";
}
/**
* 多文件上传,使用springMVC进行上传,推荐使用,效率高100倍
* @param request
* @param response
* @return
*/
@RequestMapping("/uploadMoreGreater" )
public String uploadMoreGreater(HttpServletRequest request,HttpServletResponse response) throws IllegalStateException, IOException {
//创建一个通用的多部分解析器
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
//判断 request 是否有文件上传,即多部分请求
if(multipartResolver.isMultipart(request)){
//转换成多部分request
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;
//取得request中的所有文件名
Iterator<String> iter = multiRequest.getFileNames();
while(iter.hasNext()){
//记录上传过程起始时的时间,用来计算上传时间
int pre = (int) System.currentTimeMillis();
//取得上传文件
MultipartFile file = multiRequest.getFile(iter.next());
if(file != null){
//取得当前上传文件的文件名称
String myFileName = file.getOriginalFilename();
//如果名称不为“”,说明该文件存在,否则说明该文件不存在
if(myFileName.trim() !=""){
logger.info(myFileName);
//重命名上传后的文件名
String fileName = "demoUpload" + file.getOriginalFilename();
//定义上传路径
String path = "E:/" + fileName;
File localFile = new File(path);
file.transferTo(localFile);
}
}
//记录上传该文件后的时间
int finaltime = (int) System.currentTimeMillis();
logger.info(finaltime - pre);
}
}
return "/success";
}
}