Servlet上传文件
上篇文章:
Cookie和Sessionhttps://blog.csdn.net/sniper_fandc/article/details/147353722?fromshare=blogdetail&sharetype=blogdetail&sharerId=147353722&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link目录
1 常见方法
2 上传文件示例
1 常见方法
HttpServletRequest类方法:
方法 | 含义 |
Part getPart(String name) | 获取请求中给定name的文件 |
Collection<Part> getParts() | 获取所有的文件 |
Part类(表示一个文件对象)方法:
方法 | 含义 |
String getSubmittedFileName() | 获取提交的文件名 |
String getContentType() | 获取提交的文件类型 |
long getSize() | 获取文件的大小 |
void write(String path) | 把提交的文件数据写入磁盘文件 |
2 上传文件示例
在前端代码中,主要使用tpye=”file”的input标签来上传文件,同时必须在form表单中添加属性enctype="multipart/form-data",这和后端的@MultipartConfig对应:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><form action="upload" enctype="multipart/form-data" method="POST"><input type="file" name="MyFile"><input type="submit" value="提交图片"></form></body></html>
后端代码:
//@MultipartConfig必不可少,标识当前接口是可以处理上传文件的@MultipartConfig@WebServlet("/upload")public class UploadFileServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 此处的MyFile和前端<input type="file" name="MyFile">中的name对应Part file = req.getPart("MyFile");// 获取文件的真实名字System.out.println(file.getSubmittedFileName());// 文件的大小System.out.println(file.getSize());// 文件类型System.out.println(file.getContentType());// 文件写入服务器磁盘file.write("D:\\javaee_study\\servlet\\firstServlet\\src\\main\\webapp\\upload\\result.jpg");resp.getWriter().write("upload OK!");}}
前端上传结果:
后端打印结果:
同时,抓包发现,在上传文件的POST请求中,Header头包含字段:
这里boundary是边界的意思,表示使用后面这串字符来作为body中文件的分隔符。
注意:在服务器中上传的文件保存磁盘的时候,通常会出现重名的情况,因此往往把上传的文件名转化成唯一的字符串,在数据库保存唯一字符串和对应文件的路径,然后再把文件重命名为唯一的字符串写入指定上传路径中。