使用文件上传需要引入Servlet jar和javaee jar,我这里使用的是Servlet3.1.0版和javaee7
<!--java ee--> <dependency> <groupId>javaee</groupId> <artifactId>javaee-api</artifactId> <version>7</version> </dependency> <!-- Servlet3.0 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>
客户端编程
要上传文件,必须利用 multipart/form-data 设置HTML表单的enctype属性值,指在告诉服务器,向服务器发送二进制数据。
这个表单中必须包含类型file的一个输入元素,它会被显示成一个按钮,单击它时,会打开一个对话框,供我们选择文件。
表单页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Servlet文件上传</title> </head> <body> <form action="/servlet/FileServlet" method="post" enctype="multipart/form-data"> 选择文件:<input type="file" name="file"/> <input type="submit"/> </form> </body> </html>
服务器端
MultipartConfig可以带有以下属性,这些全部是可选的:
maxFileSize:表示最多可上传的文件容量。超过设定值的文件将会遭到拒绝。maxFileSize 的默认值为-1,表示不受限制。
maxRequestSize:表示允许多部分http请求的最大容量。它的默认值为-1,表示它是不受限制的。
location:将上传的文件保存到磁盘中的指定位置,调用Part 中的write 方法将用到它。
fileSizeThreshold:设定一个溢出尺寸,超过这个值之后,上传的文件将被写入磁盘。
在一个由多部分组成的请求中,每一个表单域,包括非文本域,都会被转换成一个Part。
import javax.servlet.ServletException; import javax.servlet.annotation.MultipartConfig; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Part; import java.io.IOException; /** * Created by Administrator on 2018/4/3. */ /** * 引入java Servlet3.1.0版本 * 使用javaee7.0版本 */ //设置上传路径 @MultipartConfig(location = "D:\ioTest\") public class FileServlet extends HttpServlet { //使用Servlet3.0实现文件上传 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置编码格式 response.setContentType("text/html;charset=UTF-8"); request.setCharacterEncoding("UTF-8"); //获取上传文件 Part part=request.getPart("file"); //上传文件 上传文件名称 part.write(part.getSubmittedFileName()); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } }
最后注意一点,如果出现以下错误,很有可能是你的tomcat自带的servletapi版本太低,建议最好不要直接更换lib下的jar文件,
因为很有可能会发生冲突,所以还是建议在网上重新下载一个高版本的tomcat,