一、前端代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>上传</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/UploadServlet"
method="post" enctype="multipart/form-data">
上传文件:
<input type="file" name="file">
<br>
<input type="submit" value="上传">
</form>
</body>
</html>
二、servlet后端代码
package com.servlet;
import java.io.File;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
@WebServlet("/UploadServlet")
@MultipartConfig
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public UploadServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("test updatafile");
String path=uploadFile(request);
System.out.println("文件上传成功,文件保存在:"+path);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected String uploadFile(HttpServletRequest request) {
String savePath = request.getServletContext().getRealPath("/WEB-INF/uploadFile");
File file=new File(savePath);
if(!file.exists()){
file.mkdirs();
System.out.println("文件夹不存在,已自动创建成功!");
}
Part part;
try {
part = request.getPart("file");
String header = part.getHeader("content-disposition");
String fileName = getFileName(header);
part.write(savePath+File.separator+fileName);
System.out.println("上传成功");
return savePath+File.separator+fileName;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public String getFileName(String header) {
String[] tempArr1 = header.split(";");
String[] tempArr2 = tempArr1[2].split("=");
String fileName = tempArr2[1].substring(tempArr2[1].lastIndexOf("\\")+1).replaceAll("\"", "");
return fileName;
}
}
三、注意的点
- jsp的表单要注意加 enctype="multipart/form-data"属性,表示表单里面有文件处理。
- method要使用post。
- servlet要加@MultipartConfig注解,而且servlet的版本必须是3.0及以上。
- 文件上传后保存的位置的tomcat编译后的位置,不在原项目里面。