前端页面(upload.html)
<!--
要上传文件,必须将表单的提交方式设置为"post",设置表单的enctype属性为"multipart/form-data"
-->
<!-- 表单的action必须以项目的根路径开头,这里假设项目根路径为/servlet -->
<forom action="/servlet/upload" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="username"/><br/>
上传文件:<input type="file" name="uploadFile"/><br/>
<input type="submit" value="上传"/>
</form>
后端servlet(UploadServelt)
/*
使用注解@MultipartConfig 将一个Servlet标识为支持上传文件.
Servlet将enctype属性值"mulipart/form-data"表单的POST请求封装为Part(jakarta.servlet.http.Part)
通过Part对象对上传的文件进行操作
注意:只要前端的表单设置了enctype属性为"multipart/form-data",就一定要在后端的Servlet上加上@MultipartConfig注解
否则Servlet连表单中的普通文本框提交的数据都无法获取
*/
@MultipartConfig
@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置请求的编码(Tomcat10以上版本不需要)
request.setCharacterEncoding("utf-8");
// 通过request对象获取普通文本框提交的内容
String username = request.getParameter("username");
// 输出该内容
System.out.println("username : " + username);
/*
通过request对象获取上传的文件
public Part getPart(String name);
name参数为文件提交框中name属性的属性值
*/
Part uploadFile = request.getPart("uploadFile");
/*
通过Part对象获取文件上传时的名称
public String getSubmittedFileName();
*/
String submittedFileName = uploadFile.getSubmittedFileName();
/*
获取要在服务器中存储的真实路径
注意:getRealPath("/") 该参数必须为"/"
*/
String realPath = this.getServletContext().getRealPath("/");
/*
通过Part对象将上传的文件保存在服务器
public void write(String fileName)
*/
uploadFile.write(realPath + "/" + submittedFileName);
}
}