我们在需要向服务器上传文件时,在前端需要使用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 {@Overrideprotected 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("上传成功");}
}