文件上传
文件上传前的准备
- 在表单中必须有一个上传的控件
<input type="file" name="testImg"/>
- 因为 GET 方式有请求大小的限制,所以表单的提交方式必须是 POST
<form action="/upload" method="post">
- 表单默认的编码方式为
application/x-www-form-urlencoded
,应该修改为multipart/form-data
,以二进制的形式进行数据的传输
<form action="/upload" method="post" enctype="multipart/form-data">
- 注意:此时 Servlet 中就不能再使用
request对象.getParameter(String name)
来获取请求参数
上传组件
要实现文件的上传,需要基于以下两种组件的一种:
- Apache FileUpload 组件【操作比较复杂】
- SmartUpload 组件【操作比较简单,但存在一些问题】
基于 FileUpload 组件
使用基于Apache FileUpload上传组件实现文件的上传,步骤:
1.将必要的 jar 包导入到项目中
commons-fileupload-1.2.2.jar
commons-io-1.4.jar
2.简单写好 upload.jsp 上传页面:
<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*" %>
<html>
<head>
<title>文件的上传和下载</title>
</head>
<body>
文件上传:
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="testImg"/> <br>
<input type="submit"/>
</form>
</body>
</html>
3.编写 UploadServlet 处理相关请求:
package servlet;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Htt