此前,对于处理上传文件的操作一直是开发者比较头疼的问题,因为 Servlet 本身没有提供直接的支持,需要使用第三方框架来实现,第三方框架使用起来也不够简单。如今这些都成为了历史,Servlet 3.0 提供了文件上传操作功能,而且使用也非常简单。
文件上传API
HttpServletRequest 提供了两个方法用于从请求中解析上传的文件:
- Part getPart(String name): 用于获取请求中指定name的文件
- Coolection<Part> getParts();获取请求中全部的文件
每一个文件用 javax.servlet.http.Part
对象来表示,该接口提供了很多处理文件的方法,比如 write()
,getSubmittedFileName()
.至此结合 HttpServletRequest
对象和
@MultipartConfig
注解来处理文件上传就变得非常简单,以下咱就来做个简单的文件上传例子吧.
简单文件上传操作
书写表单,
- enctype 需使用 multipart/form-data,不然直接报错
- method 需要使用 post 提交,get 限制了数据大小
- 需要提供 file 控件
<form action="/fileUpload" method="post" enctype="multipart/form-data">
<p><input type="text" name="username"/></p>
<p><input type="file" name="headImg"/></p>
<input type="submit" value="注册">
</form>
书写FileUploadServlet
@WebServlet("/fileUpload")
@MultipartConfig
public class FileUploadServlet extends HttpServlet {
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
try {
// 普通控件数据还是使用getParameter方法来获取
System.out.println("username:" + req.getParameter("username"));
// 文件控件数据获取
Part part = req.getPart("headImg");
part.write("D://upload/headImg.png");
} catch (Exception e) {
e.printStackTrace();
}
}}
这里只需要给 Servlet 贴一个标签 @MultipartConfig
然后使用 getPart()
获取请求中指定 name 的文件到 Part 对象中,再使用 write 方法把文件保存到指定目录就 ok .
普通控件的获取也变得很简单,只需要使用获取参数的方法来获取即可.
网友评论