Servlet 3.0 改进了部分API,这种改进很好地简化了Java Web开发。其中包括HttpServletRequest 增加了对文件上传的支持。
HttpServletRequest 提供了如下两个方法来处理文件上传:
- Part getPart(String name); 根据 name 来获取文件上传域
- Collection getParts(); 获取所有的文件上传域
构造上传文件的表单
<form action="uploadServlet" method="post" enctype="multipart/form-data">
上传文件:<input type="file" name="file"/><br/>
文件描述:<input type="text" name="desc"/>
<input type="submit"/>
</form>
使用方式
在需要处理文件上传的 Servlet 进行 @WebServlet + @MultipartConfig 注解
@WebServlet("/uploadServlet")
@MultipartConfig
public class UploadServlet extends HttpServlet {
}
可以通过 javax.servlet.http.HttpServletRequest.getPart(String name) 方法获得 Part 对象
javax.servlet.http.Part 接口方法:
方法 | 作用 |
---|---|
InputStream getInputStream() throws IOException; | 获得上传的输入流 |
String getContentType(); | 获得 multipart 表单的字段值 content-type |
String getName(); | 获取 multipart 表单的字段名 |
String getSubmittedFileName(); | 如果该 part 是文件,返回文件名;否则为 null |
long getSize(); | 获得 part 的大小 |
void write(String fileName) throws IOException; | 写文件 |
void delete() throws IOException; | |
String getHeader(String name); | 获得指定头的值 |
Collection getHeaders(String name); | 获得头的全部值 |
Collection getHeaderNames(); | 获得全部的头名称 |
注意:
getSubmittedFileName 方法在 IE 10 测试的时候可能无法正确获取文件名,解决方式:
Internet 选项 > 安全 > 自定义级别 > 其他 > 禁用“将文件上传到服务器时包含本地目录路径”