导入依赖:
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
编写前端jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";
%>
<html>
<head>
<base href="<%=basePath%>">
<title>演示文件上传</title>
</head>
<body>
<%--
文件上传的表单:
1)表单组件必须使用:<input type="file">
2)请求方式只能用post:
get:参数通过请求头提交,放在url后;只能提交文本数据;对参数的长度有限制;安全性低;效率高
post:参数通过请求体提交;不但能提交文本数据,还能提交二进制数据;理论上对参数的长度没有限制; 安全性相对较高;效率较低
3)表单的编码格式只能用:multipart/form-data
根据HTTP协议的规定,客户端每次向后台提交参数,都会对所有的参数进行统一编码,默认采用的编码格式是urlencoded,这种编码格式只能对文本数据进行编码;
浏览器首先把所有参数都转换为文本数据,然后进行urlencoded编码,然后再发送到后台
文件上传的表单,只能用multipart/form-data,作用是阻止浏览器的默认行为
--%>
<form action="workbench/activity/fileUpload.do" method="post" enctype="multipart/form-data">
<input type="file" name="myFile"><br>
<input type="text" name="userName"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
后端Controller:
@RequestMapping("/workbench/activity/fileUpload.do")
@ResponseBody
public Object fileUpload(String userName, MultipartFile myFile) throws Exception{
System.out.println("userName="+userName);
String originalFilename = myFile.getOriginalFilename();
File file = new File("D:\\Java\\server_libs",originalFilename);
myFile.transferTo(file);
ReturnObject returnObject=new ReturnObject();
returnObject.setCode(Contants.AJAX_RETURN_CODE_SUCCESS);
returnObject.setMessage("上传成功");
return returnObject;
}