使用文件上传需要引入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,
Servlet3.0文件上传
原文地址:https://www.cnblogs.com/xuchangqi1/p/8707905.html