Spring mvc中上传文件:
1.Maven添加依赖
<!-- commons upload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
2.spring配置
<mvc:default-servlet-handler/>
<!-- 配置文件上传类型解析器 multipartResolver-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
3.Controller上传实现
/**
* @Description: 文件上传
* @param common 文件上传参数
* @param request
* @return
*/
@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public String upload(RequestCommonDto common,HttpServletRequest request) throws MessageRecordException {
String result = null;
try {
if (request instanceof MultipartHttpServletRequest) {
String directory = "media";
MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;
// 获取上传的文件
Map<String, MultipartFile> fileMap = multipartHttpServletRequest.getFileMap();
// 如果文件格式合法进行处理
for (Map.Entry<String, MultipartFile> entry : fileMap.entrySet()) {
//生成唯一文件传输ID
String fileTransferId = UUID.randomUUID().toString();
fileNameList.add(fileTransferId);
//获取文件后缀名
String fileName = entry.getValue().getOriginalFilename();
String suffix = fileName.substring(fileName.indexOf("."), fileName.length());
// 获取文件需要上传到的路径
String newName = fileTransferId + suffix;
String filePath = request.getSession().getServletContext().getRealPath("/") + directory + "//"
+ newName;
// 转存文件
entry.getValue().transferTo(new File(filePath));
}
//返回文件Ids
result = Arrays.toString(fileNameList.toArray());
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
4.页面Ajax提交上传
<%@ page language="java" contentType="text/html; charset=UTF-8"
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" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件上传Test</title>
<!-- 引入依赖的Jquery和JQuery-Form -->
<script src="http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/jquery.form/4.2.1/jquery.form.min.js"
integrity="sha384-tIwI8+qJdZBtYYCKwRkjxBGQVZS3gGozr3CtI+5JF/oL1JmPEHzCEnIKbDbLTCer"
crossorigin="anonymous"></script>
</head>
<body>
<div>
<form id="addForm" action="<%=basePath%>media/upload" method="POST" enctype="multipart/form-data">
<!-- 可以是任意个文件域 -->
<h3>上传设置</h3>
上传文件:<input type="file" name="file1"/>
<br>
fileName<input id="fileName" type="text" name="fileName" value="100" />
<br>
<input type="button" id="submitBtn" value="上传文件"/>
<br>
</form>
<br>
文件传输ID:<a id="download" href="javascript:void(0);"></a>
<!-- 自定义JavaScript -->
<script type="text/javascript">
$("#submitBtn").on("click", function(){
$("#download").attr("href","javascript:void(0);");
$("#download").text("正在上传,请稍后...");
var path = '<%=basePath%>upload/';
$("#addForm").ajaxSubmit({
success : function(data){
$("#download").text(JSON.stringify(data));
},
error : function(){
$("#download").text("文件过大,请上传小于50M文件!");
}
});
});
</script>
</div>
</body>
</html>
配置完成,启动,上传!