本项目的文件上传使用的是apache下的commons组件来实现,包括commons-fileuplload.jar包和commons-io.jar包。
上传之前需要创建存放上传文件存放临时文件的目录。
在磁盘下创建一个upload的目录,然后在upload中再创建一个temp的子目录。
效果展示
项目结构
代码
pom.xml
在此项目中需要使用的第三方加包的依赖如下:
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
upload.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件上传</title>
</head>
<body>
<form action="uploadServlet" method="post" enctype="multipart/form-data">
<input type="submit" value="上传文件" name="upload">
<br>
<input type="file" name="x" size="40"/>
</form>
</body>
</html>
UploadServlet.java
package servlet;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
public class UploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
// 设置请求的编码
request.setCharacterEncoding("UTF-8");
// 设置响应的编码
response.setContentType("text/html;charset=UTF-8");
// 设置输出控制台编码
System.setProperty("sun.jnu.encoding", "utf-8");
// 设置存放上传文件的目录
String filePath = "G:\\Web\\ServletDemo";
// 设置存放临时文件的目录
String tempFilePath = "G:\\Web\\ServletDemo\\temp";
// 创建一个输出
PrintWriter writer = response.getWriter();
try {
// 创建一个基于硬盘的FileItem工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置向硬盘写数据时所用的缓冲区的大小,此处为4K
factory.setSizeThreshold(4 * 1024);
// 设置临时目录
factory.setRepository(new File(tempFilePath));
// 创建一个文件上传处理器
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置允许上传的文件的最大尺寸,此处为4M
upload.setSizeMax(4 * 1024 * 1024);
// 中文处理
upload.setHeaderEncoding("UTF-8");
// 解析请求的内容提取文件数据
List<FileItem> fileItems = upload.parseRequest(request);
// 创建迭代器
Iterator iterator = fileItems.iterator();
// 迭代表单数据
while (iterator.hasNext()) {
FileItem item = (FileItem) iterator.next();
// isFormField()方法是判断item一个普通文本表单字段,还是一个文件表单字段
// 如果不是普通字段则是上传的文件进行上传
if (!item.isFormField()) {
// 需要上传的文件的路径
String fileName = item.getName();
int index = fileName.lastIndexOf("\\");
// 文件名
fileName = fileName.substring(index + 1, fileName.length());
// 文件大小
long fileSize = item.getSize();
if (fileName.equals("") || fileSize == 0) {
return;
}
// 将数据写入文件
File uploadFile = new File(filePath + "/" + fileName);
item.write(uploadFile);
// 前台响应上传成功的结果
writer.println(fileName + "已经保存" + "\t\t" + "文件" + fileName + " 的大小:" + fileSize + "\r\n");
}
}
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<!--欢迎页面-->
<welcome-file-list>
<welcome-file>upload.jsp</welcome-file>
</welcome-file-list>
<!--文件上传Servlet-->
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>servlet.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/uploadServlet</url-pattern>
</servlet-mapping>
</web-app>
如果对完整源码感兴趣。
可搜索微信公众号【Java实例程序】或者扫描下方二维码关注公众号获取更多。
注意:在公众号后台回复【CSDN201910072131】可获取本节源码。