步驟如下:
**1. 添加如下依賴**
```xml
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
```
**2. 前端上傳文件**
```html
<body>
<input id="file" type="file" multiple />
<br />
<button onclick="uploadFile()">上傳</button>
</body>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
function uploadFile() {
const files = $("#file")[0].files
const formData = new FormData()
for (let i = 0; i < files.length; i++) {
formData.append("file", files[i])
}
formData.append("message", "上傳文件")
$.ajax({
url: '/web/upload?method=uploadFile',
async: true,
method: 'post',
data: formData,
processData: false,
contentType: false,
dataType: 'json',
beforeSend: function() {},
success: function(res) {
console.log(res)
},
error: function() {}
})
}
</script>
```
**3. Servlet代碼**
```java
@WebServlet("/upload")
public class UploadServlet extends BaseServlet {
public void uploadFile(HttpServletRequest request, HttpServletResponse response) throws Exception {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
Map<String, Object> params = new HashMap<>(1);
//檢測是否為多媒體上傳
if (!ServletFileUpload.isMultipartContent(request)) {
params.put("msg", "上傳數據不是多媒體數據");
out.println(JSON.toJSONString(params));
out.flush();
return;
}
//配置上傳參數
DiskFileItemFactory factory = new DiskFileItemFactory();
//內存臨界值,內存每次能處理3M
factory.setSizeThreshold(1024 * 1024 * 3);
//當文件大小超過內存臨界值時,設置的臨時存儲目錄
factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
ServletFileUpload upload = new ServletFileUpload(factory);
//設置單個文件最大上傳值為5M
upload.setFileSizeMax(1024 * 1024 * 5);
//設置最大請求值
//包含文件和表單數據,每次提交的表單總數據不能超過50M
upload.setSizeMax(1024 * 1024 * 50);
//中文處理
upload.setHeaderEncoding("UTF-8");
//解析請求的內容,將文件和表單數據分開
List<FileItem> formItems = upload.parseRequest(request);
if (CollectionUtils.isNotEmpty(formItems)) {
for (FileItem item : formItems) {
//判斷是不是文件
if (!item.isFormField()) {
System.out.println("文件名:" + item.getName());
//文件名:poi01.png
//文件名:poi02.png
File storeFile = new File("e:/upload/servlet/" + item.getName());
//將文件存儲到磁盤中
item.write(storeFile);
} else {
System.out.println(new String(item.get(), "UTF-8"));
//上傳文件
}
}
}
params.put("msg", "上傳成功");
out.println(JSON.toJSONString(params));
out.flush();
}
}
```