文件上传之Servlet
导包 commons-fileupload-1.3.1.jar commons-io-2.2.jar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class UploadHandleServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String savePath= this .getServletContext().getRealPath( "/WEB-INF/upload/" ); File file= new File(savePath); if (!file.exists()&&!file.isDirectory()){ System.out.println(savePath+ "目录不存在,需要创建" ); //创建目录 file.mkdirs(); } //消息提示 String message= "" ; //创建DiskFileItemFactory工厂 DiskFileItemFactory factory= new DiskFileItemFactory(); //创建一个文件上传解析器 ServletFileUpload upload= new ServletFileUpload(factory); //解决文件上传乱码问题 upload.setHeaderEncoding( "UTF-8" ); if (!ServletFileUpload.isMultipartContent(request)){ //按照传统方面获取数据 return ; } try { //使用ServletFileUpload解析器解析数据,返回来的是一个List<FileItem>集合,每一个FileItem对应一个表单输出 List<FileItem> list=upload.parseRequest(request); for (FileItem item : list) { if (item.isFormField()){ String name=item.getFieldName(); String value=item.getString( "UTF-8" ); System.out.println(name+ "=" +value); } else { String filename=item.getName(); System.out.println(filename); if (filename== null ||filename.trim().equals( "" )){ continue ; } //处理获取到的上传文件的文件名的路径部分,只保留文件名部分 filename=filename.substring(filename.lastIndexOf( "\\" )+ 1 ); //获取item文件上传输入流 InputStream in=item.getInputStream(); //创建一个文件输出流 FileOutputStream out= new FileOutputStream(savePath+ "\\" +filename); byte [] buffer= new byte [ 1024 ]; int len= 0 ; while ((len=in.read(buffer))> 0 ){ out.write(buffer, 0 ,len); } in.close(); out.close(); item.delete(); message= "文件上传成功" ; } } } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); } request.setAttribute( "message" , message); request.getRequestDispatcher( "/message.jsp" ).forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } } |
jsp页面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <%@ page language="java" pageEncoding="UTF-8"%> <! DOCTYPE HTML> < html > < head > < title >文件上传</ title > </ head > < body > < form action="${pageContext.request.contextPath}/UploadHandleServlet" enctype="multipart/form-data" method="post"> 上传用户:< input type="text" name="username">< br /> 上传文件1:< input type="file" name="file1">< br /> < input type="submit" value="提交"> </ form > </ body > </ html > |
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>成功页面</title> </head> <body> ${message} </body> </html>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器