J2EE学习笔记——文件的上传

本文介绍了一个使用Java实现的文件上传示例,包括所需的commons.io和commons-fileupload库,通过一个简单的JSP页面和Servlet来处理文件上传逻辑,并对上传文件的类型和大小进行了限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件上传需要  两个JAR包:

commons.io-1.4.0.jar

org.apache.commons-fileupload-1.2.1.jar



index.jsp:

<body>
    上传文件 <br>
    
    <form action="UpLoadServer" method="post" enctype="multipart/form-data" >
    
     用户名: <input type="text" name="username" ><br>
     
     文件: <input type="file" name="file" >
       <input type="submit" value="上传">
        
    
    
    </form>
  </body>
</html>
==============================================================================
servlet代码:

package xuyan.com;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;

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.FileUploadBase.FileSizeLimitExceededException;
import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class UpLoadServer extends HttpServlet {

	private  String[] fileExts={"doc","zip","rar","jpg","txt"};
	
	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

	
		
		//检查请求是否是一个上传表单(必须是post请求,和enctype=“multipart/form-date”)
		
		Boolean isMultipart=ServletFileUpload.isMultipartContent(request);
		
		if(isMultipart)
		{
			//创建一个临时文件存放要上传的文件,第一个参数是上传文件大小,第二个参数是存放的临时目录
			DiskFileItemFactory factory=new DiskFileItemFactory(1024*1024*5,new File("D:\\temp"));
		  	
			//创建一个文件上传的句柄
			ServletFileUpload upload=new ServletFileUpload(factory);
			
			//设置文件上传的整个大小和上传的单个文件大小
			upload.setSizeMax(1024*1024*50);
			upload.setFileSizeMax(1024*1024*5);
			
			try {
				
				//把页面表单中每一个表单元解析成一个Fileitem
				List<FileItem> items=upload.parseRequest(request);
				for(FileItem fileItem:items)
				{
					//如果是一个普通的表单元素(type不是files的表单元素)
					if(fileItem.isFormField())
					{
						//System.out.println(fileItem.getFieldName()); //得到对应表单元素的名字
						System.out.println(fileItem.getString());//得到表单元素的值
						
					}
					else 
					{
						//获取文件的后缀名
						String filename=fileItem.getName();//得到文件名
						String fileExt=filename.substring(filename.lastIndexOf(".")+1, filename.length());
						
						if(Arrays.binarySearch(fileExts, fileExt)!=-1)
						{
							try {
								
								//将文件上传到upload目录并命名  ,getreadplth可以得到该目录下包含/upload的绝对路径
								
								fileItem.write(new File(getServletContext().getRealPath("/upload")+"/"+UUID.randomUUID().toString()+"."+fileExt));
								System.out.println("该文件上传成功!!");
								
								
							} catch (Exception e) {
								// TODO: handle exception
								e.printStackTrace();
							}
						}
						
						else
						{
							System.out.println("该文件类型不能上传");
						}
					}
				}
				
			} catch (SizeLimitExceededException e) {
				// TODO: handle exception
				 System.out.println("整个请求的大小超过了规定的大小..."); 
			}
			
			catch (FileSizeLimitExceededException e)
			{
				System.out.println("请求中一个上传文件的大小超过了规定的大小...");
			}
			
			catch(FileUploadException e)
			{
				e.printStackTrace();
			}
			
		
		}
		
	}

	/**
	 * The doPost method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to post.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		this.doGet(request, response);
	}

}







J2eeFAST是一个Java EE企业级快速开发平台,基于经典技术组合(Spring Boot、Spring MVC、Apache Shiro、MyBatis-Plus、Freemarker、Bootstrap、AdminLTE)采用经典开发模式,让初学者能够更快的入门并投入到团队开发中去。在线代码生成功能,包括核心模块如:组织机构、角色用户、菜单及按钮授权、数据权限、系统参数、内容管理、license认证,BPM工作流等。采用松耦合设计;界面无刷新,一键换肤;众多账号安全设置,密码策略;在线定时任务配置;支持多数据源;支持读写分离、分库分表。 J2eeFAST功能: 1、用户管理:用户是系统操作者,该功能主要完成系统用户配置。 2、部门管理:配置系统组织机构(公司、部门),树结构展现支持数据权限。 3、岗位管理:配置系统用户所属担任职务。 4、菜单管理:配置系统菜单,操作权限,按钮权限标识等。 5、角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 6、字典管理:对系统中经常使用的一些较为固定的数据进行维护。 7、参数管理:对系统动态配置常用参数。 8、操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 9、登录日志:系统登录日志记录查询包含登录异常。 10、在线用户:当前系统中活跃用户状态监控。 11、定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 12、代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 13、服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。 14、在线构建器:拖动表单元素生成相应的HTML代码。 15、连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 16、产品许可: 对项目进行许可证书控制,防止程序拷贝运行。 17、公告通知: 针对项目升级重要情况出通知公告直接生成静态页面,可以实现延迟推送,设置时效性,实时。 J2eeFAST软件架构: 核心框架:Spring Boot 2.2.5.RELEASE 安全框架:Apache Shiro 1.4.2 模板引擎:Freemarker 前端:AdminLTE 2.3.8, Bootstrap 3.3.7, Bootstrap-Table 1.11.0, JQuery 3.3.1 持久层框架:MyBatis-Plus 3.3.1 定时任务: Quartz 数据库连接池:Druid 1.10.1 数据库: Mysql5.7 分布式缓存数据库: Redis 4.0.9 工具类:Hutool 4.5.8 工作流引擎:flowable 6.4.2 J2eeFAST安装教程: 1、需要准备环境Mysql5.7以上、JDK1.8、Maven3.3、Redis4.X以上、开发工具eclipse或者IEDA。 2、下载源码git clone https://gitee.com/zhouhuanOGP/J2EEFAST.git。 3、编译代码找到根目录下pom.xml,执行mvn clean install命令编译一键打包。一般来说不会有什么问题,如果还是编译不成功,可以按照优先级逐个编译试一试。 4、导入数据库db目录里initDb.sql有建库建表语句按步骤执行即可。 5、将代码导入开发工具fast-admin启动模块- 执行FastApplication类即可 注意:fast-admin模块,资源目录application-Test.yml中修改连接数据库和链接地址;如果你是按照initDb.sql建库,test.sql导入初始数据,则账号密码用户名都不需要修改。 6、搭建文档。 最大管理员账号:admin 密码:admin。其他账户密码都是123456 演示地址的账号 :admin 密码:admin   J2eeFAST企业级快速开发平台 v2.2.1 更新日志: 升级mybatisplus到最新版本3.4.2 新增数据库脚本自动升级 适配恶心的IE浏览器最低适配IE10 修复添加SQLServer数据库源问题 修复多源数据JTA事务问题 新增多源数据支持Mapper接口注解 修复表格显示图片点击事件问题 优化适配移动端 linux环境升级、启动脚本备份文件无目录问题 修复多源数据库代码生成切换数据库问题 修复oracle兼容问题 修复代码生成器生成头像问题 修复适配数据库执行语句问题 新增金额转换中文通用方法 修复代码生成div标签问题 调整文件上传考虑事务问题、不删除文件 移除项目pom文件多余配置 新增系统默认配置文件 简化配置文件 移除代码默认密码字段 新增base64字符判断公用方法 优化图片上传支持直接Base64字符 新增表格通过id获取行
授权方式: 开源软件 界面语言: 简体中文 文件大小: 16.9 MB 更新时间: 2020-08-11 资源类型: 国产软件 推荐等级: ★★★☆☆ 平台环境: JAVA/Mysql 作者主页: 点击查看 演示地址: 点击查看 详细介绍 – [ J2eeFAST企业级快速开发平台 v2.0.8 ] J2eeFAST 是一个Java EE企业级快速开发平台,基于经典技术组合(Spring Boot、Spring MVC、Apache Shiro、MyBatis-Plus、Freemarker、Bootstrap、AdminLTE)采用经典开发模式,让初学者能够更快的入门并投入到团队开发中去。在线代码生成功能,包括核心模块如:组织机构、角色用户、菜单及按钮授权、数据权限、系统参数、内容管理、license认证,BPM工作流等。采用松耦合设计;界面无刷新,一键换肤;众多账号安全设置,密码策略;在线定时任务配置;支持多数据源;支持读写分离、分库分表。 J2eeFAST功能 1、用户管理:用户是系统操作者,该功能主要完成系统用户配置。 2、部门管理:配置系统组织机构(公司、部门),树结构展现支持数据权限。 3、岗位管理:配置系统用户所属担任职务。 4、菜单管理:配置系统菜单,操作权限,按钮权限标识等。 5、角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 6、字典管理:对系统中经常使用的一些较为固定的数据进行维护。 7、参数管理:对系统动态配置常用参数。 8、操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 9、登录日志:系统登录日志记录查询包含登录异常。 10、在线用户:当前系统中活跃用户状态监控。 11、定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 12、代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 13、服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。 14、在线构建器:拖动表单元素生成相应的HTML代码。 15、连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 16、产品许可: 对项目进行许可证书控制,防止程序拷贝运行。 17、公告通知: 针对项目升级重要情况出通知公告直接生成静态页面,可以实现延迟推送,设置时效性,实时。 J2eeFAST软件架构 核心框架:Spring Boot 2.2.5.RELEASE 安全框架:Apache Shiro 1.4.2 模板引擎:Freemarker 前端:AdminLTE 2.3.8, Bootstrap 3.3.7, Bootstrap-Table 1.11.0, JQuery 3.3.1 持久层框架:MyBatis-Plus 3.3.1 定时任务: Quartz 数据库连接池:Druid 1.10.1 数据库: Mysql5.7 分布式缓存数据库: Redis 4.0.9 工具类:Hutool 4.5.8 工作流引擎:flowable 6.4.2 J2eeFAST安装教程 1、需要准备环境Mysql5.7以上、JDK1.8、Maven3.3、Redis4.X以上、开发工具eclipse或者IEDA。 2、下载源码git clone https://gitee.com/zhouhuanOGP/J2EEFAST.git。 3、编译代码找到根目录下pom.xml,执行mvn clean install命令编译一键打包。一般来说不会有什么问题,如果还是编译不成功,可以按照优先级逐个编译试一试。 4、导入数据库db目录里initDb.sql有建库建表语句按步骤执行即可。 5、将代码导入开发工具fast-admin启动模块- 执行FastApplication类即可 注意:fast-admin模块,资源目录application-Test.yml中修改连接数据库和链接地址;如果你是按照initDb.sql建库,test.sql导入初始数据,则账号密码用户名都不需要修改。 6、搭建文档。 最大管理员账号:admin 密码:admin。其他账户密码都是123456 演示地址的账号 :admin 密码:admin J2eeFAST截图 相关阅读 同类推荐: 站长常用源码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值