JSP&Servlet(11)——使用Servlet实现文件上传功能

mac2022-07-05  13

本项目的文件上传使用的是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实例程序】或者扫描下方二维码关注公众号获取更多。

注意:在公众号后台回复【201910072131】可获取本节源码。

最新回复(0)