当前位置: 首页 > news >正文

Servlet上传文件

这是一个Maven项目

tomcat版本:9.0.107

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>FuncExt</artifactId><packaging>war</packaging><version>1.0-SNAPSHOT</version><name>FuncExt Maven Webapp</name><url>http://maven.apache.org</url><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/commons-io/commons-io --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.20.0</version></dependency><!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.6.0</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>javax.servlet.jsp-api</artifactId><version>2.3.3</version></dependency></dependencies><build><finalName>FuncExt</finalName></build>
</project>

Servlet.java

package Servlet;import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.ProgressListener;
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.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.UUID;public class Servlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//判断上传的文件是普通表单还是带文件的表单if(!ServletFileUpload.isMultipartContent(req)){System.out.println("普通表单");return;}//创建上传文件的保存路径,在WEB-INF路径下,安全,用户无法直接访问String uploadPath = this.getServletContext().getRealPath("/WEB-INF/upload");File uploadFile = new File(uploadPath);if(!uploadFile.exists()){uploadFile.mkdir();//创建临时目录}//缓存,临时文件//临时路径String tmpPath = this.getServletContext().getRealPath("/WEB-INF/tmp");File tmpFile = new File(tmpPath);if(!tmpFile.exists()){tmpFile.mkdir();}try{//创建DiskFileItemFactory对象,处理文件上传路径或者大小限制DiskFileItemFactory factory = getDiskFileItemFactory(tmpFile);//获取ServletFileUploadServletFileUpload upload = getServletFileUpload(factory);//处理上传的文件String msg = uploadParseRequest(upload,req,uploadPath);//servlet请求转发消息req.setAttribute("msg",msg);req.getRequestDispatcher("info.jsp").forward(req,resp);} catch (Exception e){e.printStackTrace();}System.out.println("文件保存路径:" + uploadPath);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}public static DiskFileItemFactory getDiskFileItemFactory(File file){DiskFileItemFactory factory = new DiskFileItemFactory();//通过这个工厂设置一个缓冲区,上传的文件大于这个缓冲区的话,将它放到临时文件里factory.setSizeThreshold(1024 * 1024);// 1Mfactory.setRepository(file); //临时文件的保存目录return factory;}public static ServletFileUpload getServletFileUpload(DiskFileItemFactory diskFileItemFactory){ServletFileUpload upload = new ServletFileUpload(diskFileItemFactory);//监听文件上传进度upload.setProgressListener(new ProgressListener() {@Overridepublic void update(long l, long l1, int i) {System.out.println("总大小:" + l1 + "已上传:" + l);}});upload.setHeaderEncoding("UTF-8");upload.setFileSizeMax(1024 * 1024 * 10);upload.setSizeMax(1024 * 1024 * 10);return upload;}public static String uploadParseRequest(ServletFileUpload upload,HttpServletRequest request,String uploadPath) throws Exception{String msg = "";//把前端请求解析,分成一个一个文件List<FileItem> fileItems = upload.parseRequest(request);for(FileItem fileItem : fileItems){if(fileItem.isFormField()){String name = fileItem.getFieldName();String value = fileItem.getString("UTF-8");System.out.println(name + ":" + value);}else {String uploadFileName = fileItem.getName();System.out.println("上传的文件名:" + uploadFileName);if(uploadFileName == null || uploadFileName.trim().equals("")){continue;}String fileName = uploadFileName.substring(uploadFileName.lastIndexOf("/") + 1);String fileExtName = fileName.substring(fileName.lastIndexOf(".") + 1);System.out.println("文件信息【件名:" + fileName + "---文件类型" +  fileExtName + "】");String uuidPath = UUID.randomUUID().toString();String realPath = uploadPath + "/" + uuidPath;//给每个文件创建一个对应的文件夹;File realPathFile = new File(realPath);if(!realPathFile.exists()){realPathFile.mkdir();}InputStream inputStream = fileItem.getInputStream();FileOutputStream fileOutputStream = new FileOutputStream(realPath + "/" + fileName);byte[] b = new byte[1024 * 1024];int len = 0;while((len = inputStream.read(b)) != -1){fileOutputStream.write(b,0,len);}fileOutputStream.close();inputStream.close();msg = "文件上传成功!";fileItem.delete();}}return msg;}
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"metadata-complete="true"><servlet><servlet-name>file</servlet-name><servlet-class>Servlet.Servlet</servlet-class></servlet><servlet-mapping><servlet-name>file</servlet-name><url-pattern>/upload</url-pattern></servlet-mapping>
</web-app>

index.jsp

<%@ page contentType="text/html; charset=UTF-8" language="java" %>
<html>
<body><form action =  "${pageContext.request.contextPath}/upload" enctype="multipart/form-data" method="post">上传用户: <input type="text" name="username"> <br/><p><input type="file" name = "file1"></p><p><input type="file" name = "file2"></p><p> <input type = "submit"> | <input type="reset">  </p></form>
</body>
</html>

info.jsp

<%@ page contentType="text/html; charset=UTF-8" language="java" %>
<html>
<body>${msg}</body>
</html>
http://www.dtcms.com/a/337889.html

相关文章:

  • 亚马逊新手突围:从流量破冰到持续出单
  • ACCESS窗体如何导出到文件,导入另一个工程?
  • java基础总结
  • mysql 主从架构详解
  • label studio标注时序数据
  • 《Unity Shader入门精要》学习笔记二
  • css中px转rem的计算公式
  • 设置独立显卡,解决游戏卡又慢
  • 【opencv-Python学习笔记(6):阈值处理】
  • 深入理解 depot_tools:Chromium 源码开发全流程(fetch/gclient/git cl 使用详解与踩坑经验)
  • Effective C++ 条款49:了解new-handler的行为
  • JAVA经典面试题:数据库调优
  • 算法题——字符串
  • input 标签的宽度根据内容自动调整
  • 电梯的构造|保养|维修视频全集_电梯安全与故障救援(课程下载)
  • JSX本质是什么
  • AI行业应用深度报告:金融、医疗、教育、制造业落地案例
  • Docker之redis安装
  • linux中的hostpath卷、nfs卷以及静态持久卷的区别
  • 使用websockets中的一些问题和解决方法
  • 数据结构04(Java)-- ( 归并排序及其时间复杂度)
  • gflags框架安装与使用
  • 手机视频怎么提取音频?3步转成MP3,超简单!
  • Vue 中 v-for 的使用及 Vue2 与 Vue3 的区别
  • Vue 3中watch的返回值:解锁监听的隐藏技巧
  • Navicat 无法登录时找回 SQL 文件的方法
  • Tidio实时聊工具
  • Linux上安装PostgreSQL-源码编译安装备份恢复(超详细)
  • 视觉语言导航(4)——强化学习的三种方法 与 优化算法 2.43.4
  • IP白名单、网段白名单