我们在需要向服务器上传文件时,在前端需要使用form表单,form表单需要使用特殊的类型 form-data
此时提交文件的时候,浏览器会把文件内容以form-data的格式构造到HTTP请求中,服务器就可以通过getPart获取了
需要注意:
- 一个HTTP请求,可以一次提交多个文件,每个文件都称为一个Part。
- 每一个Part都有一个name标识,服务器可以通过name找到对应的Part。这个name对应了input标签的name属性
服务器getPart函数获取到的Part类提供的方法
方法 | |
---|---|
String getSubmittedFileName() | 获取提交文件名 |
String getContentType() | 获取提交文件类型 |
long getSize() | 获取文件大小 |
void writeString(String Path) | 将提交的文件写入到磁盘文件中 |
后端要想成功使用getPart函数,需要在处理post请求的类前加上@MultipartConfig注解,否则会调用失败。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>上传文件</title>
</head>
<body>
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="img">
<input type="submit" value="提交">
</form>
</body>
</html>
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;
import java.io.IOException;
@MultipartConfig
@WebServlet("/upload")
public class UpLoad extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Part part = req.getPart("img");
System.out.println(part.getSize());
System.out.println(part.getSubmittedFileName());
System.out.println(part.getContentType());
//这里选择写入图片文件
part.write("E:\\TmpBuff\\tmp.jpg");
resp.setContentType("text/html;charset=utf8");
resp.getWriter().write("上传成功");
}
}