SpringMVC(23):使用springmvc+spring+jdbc 优化订单管理系统的示例(单文件上传功能的实现)

R语言生存分析之限制性立方样条分析:样条回归、和多项式回归有什么不同?是否存在非线性关系、限制性立方样条cox回归模型 阅读详情

2018年1月28日

功能:利用Springmvc 实现单文件上传;使用了MultipartResolver接口;

【0】MultipartResolver接口用于处理上传请求,将上传请求包装成了可以获取文件的数据,大大方便了操作;它有两个实现类:CommonsMultipartResolver 和 StandardservletMultipartResolver。

      后者(StandardservletMultipartResolver)使用了Servlet3.0标准的上传方式;

      前者(CommonsMultipartResolver )使用了Apache的commons-fileupload 来完成具体的上传操作;我下面使用的是CommonsMultipartResolver ;


【1】项目jar包与文件框架


图1


图2

为了方便理解,先从简单的View入手,再到Controller、Service 与 Dao层,最后是数据库Mysql;


【2】View层,在useradd.jsp添加了以下代码:

   <h5>以下为上传-单文件测试</h5>
   <form action="${pageContext.request.contextPath }/user/upload" method="post" enctype="multipart/form-data">
      <input type="hidden" id="errorinfo" value="${uploadFileError}">         
                文件:<input type="file" name="uploadFile"/><br/><br/>
      <input type="submit" value="上传"/>
   </form>


注意之处:1、enctype="multipart/form-data",指定表单内容的类型,支持文件上传;2、<input type="file" name="uploadFile"/>,file组件。


显示效果:


图3


图4(testfile1.png)

注意之处:1、文件名要全英文,中文可能会在传输乱码或者报错! 2、文件路径要全英文,中文可能会在传输乱码或者报错!


【3】需要在springmvc配置文件进行MultipartResolver注册(springmvc-servlet.xml):

  	<!-- 配置MultipartResolver -->
  	<bean id="multipartResolver" 
  	  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  	 	<property name="maxUploadSize" value="5000000"></property>
  	 	<property name="defaultEncoding" value="UTF-8"></property> 
  	 </bean>

注意之处:1、这里设置了请求的编码格式,设置为UTF-8,要和JSP的pageEncoding设置一样,才能便于读取;2、maxUploadSize,上传文件的大小上限,单位是字节(Byte);


【4】Controller控制器,主要是对文件上传确定后的一些后台处理(文件名称、大小、格式是否合格),因此,只需要在UserController.java文件添加处理方法:

	@RequestMapping(value="/upload" ,method=RequestMethod.POST)
	public String test(HttpSession session ,HttpServletRequest  request,
			MultipartFile uploadFile) throws Exception, IOException{
		System.out.println("test==");
		String idPicPath = null;
		if(!(uploadFile.isEmpty())){
			System.out.println("begin attaching...");
			//获取保存文件的绝对路径
			String path = request.getSession().getServletContext().getRealPath("statics"+File.separator+"uploadfiles");
			System.out.println("2.1 uploadFile path ===>"+path);
			//获取上传文件的文件名
			String oldFileName = uploadFile.getOriginalFilename();//原文件名
			System.out.println("2.2 uploadFile oldFileName ===>"+oldFileName);
			//获取文件名后缀
			String prefix = FilenameUtils.getExtension(oldFileName);//原文件名后缀
			System.out.println("2.3 uploadFile prefix ===>"+prefix);
			//设置文件大小的变量,KB是单位
			int filesize = 5000000;
			System.out.println("2.4 uploadFile filesize ===>"+uploadFile.getSize());
			if(uploadFile.getSize() > filesize){
				request.setAttribute("uploadFileError", "* 上传大小不得超过5000KB");
				System.out.println("* 上传大小不得超过5000KB");
				return "useradd";
			}else if(prefix.equalsIgnoreCase("jpg")
					   || prefix.equalsIgnoreCase("png")
					   || prefix.equalsIgnoreCase("jpeg")
					   || prefix.equalsIgnoreCase("pneg")){
				//上传格式正确,重命名文件
				String fileName = System.currentTimeMillis()+RandomUtils.nextInt(1000000)+"_Personal.jpg";
				System.out.println("2.5 new fileName===>"+uploadFile.getName());
				//新建这么一个文件,FILE API
				File targetFile = new File(path,fileName); 
				if(!targetFile.exists()){
					targetFile.mkdirs();
				}
				//保存
				try{
					//上传
					uploadFile.transferTo(targetFile);
				}catch (Exception e){
					e.printStackTrace();
					request.setAttribute("uploadFileError", "* 上传失败! ");
					System.out.println("* 上传失败! ");
					return "useradd";
				}
				idPicPath = path+File.separator+fileName;
			}else{
				request.setAttribute("uploadFileError", "* 上传格式错误!");
				System.out.println("* 上传格式错误!");
				return "useradd";
			}
//			//获取文件名字作保存在服务器的文件名
//			String filename = uploadFile.getOriginalFilename();
//			
//			//前半部分,目录,将WebRoot下一个名称为image的文件夹 转化为绝对路径
//			String leftPath = session.getServletContext().getRealPath("statics");
//			//进行路径拼接
//			File file = new File(leftPath,filename);
//			System.out.println("file path: "+file.getPath());
//			//把 MultipartFile 文件流的数据输出到目标文件
//			uploadFile.transferTo(file);
		}
		User user = new User();
		user.setIdPicPath(idPicPath);
		System.out.println("user.idPicPath: "+ user.getIdPicPath());
		return "userlist";
			
	}

解释:(1)上面用到的API 可以参考开发手册去理解用法:

1.FilenameUtils:getExtension(oldFileName),来自
2.MultipartFile:getOriginalFilename()、isEmpty()、
3.session.getServletContext().getRealPath()
4.File.separator

(2)RandomUtils 工具类的使用,需要导入jar包:



【5】测试结果:

打印日志:

begin attaching...
2.1 uploadFile path ===>D:\java_ee_eclipse\mmb_workplace\.metadata\.plugins\org.eclipse.wst.server.core\tmp4\wtpwebapps\springmvc5\statics\uploadfiles
2.2 uploadFile oldFileName ===>testfile1.png
2.3 uploadFile prefix ===>png
2.4 uploadFile filesize ===>138624
2.5 new fileName===>uploadFile
user.idPicPath: D:\java_ee_eclipse\mmb_workplace\.metadata\.plugins\org.eclipse.wst.server.core\tmp4\wtpwebapps\springmvc5\statics\uploadfiles\1517554236373_Personal.jpg

文件结构:


图5


【6】改进之处:因为很多时候,不仅仅只是上传文件,还需要传递别的数据,所以之后的博文会继续讲到相关内容。


openclaw通俗入门系列4——智能体工作区 工作区 = 智能体的家,存放它的性格、记忆、技能。默认不是牢笼(可以用沙箱隔离)。建议放到私有 Git 备份,但绝对不要提交密钥! 阅读详情

相关推荐

视频动作识别、行为识别、时空动作检测数据集整理(持续更新)

动作、行为、事件 在计算机视觉的相关研究中,人体的动作、行为识别是一个基础研究问题。但目前识别、检测人类的动作/行为仍然是一个巨大的挑战。这里整理下当前相关的细分任务、数据集和开源代码(持续更新中)。

人工智能算法与工程实践 3万+

request.getSession().getServletContext().getRealPath("/");

request.getSession().getServletContext()是获取的servlet容器对象, 相当于tomcat容器了。getRealPath("/") 获取实际路径,项目发布时, 在容器中的实际路径。 D:\apache-tomcat-8.5.23\apache-tomcat-8.0.52\wtpwebapps\Springmvc_day01\(Springmvc_day...

路在何方 1万+

小龙虾 OpenClaw 安装全攻略:本地部署 AI 智能体一步到位

OpenClaw(昵称小龙虾)是一款 MIT 开源协议的本地优先 AI 智能体执行网关,支持多平台接入、本地部署,能实现自然语言驱动的设备自动化操作,区别于纯对话 AI,可直接操控系统执行实际任务,数据全程本地存储更安全。本文带来 2026 最新版 OpenClaw 安装教程,适配 Windows/macOS/Linux 全系统,新手也能一键搞定。

lujiawei00的专栏 1973

SpringMVC实现文件上传功能

在Java中,MultipartFile是Spring框架提供的一个接口,用于处理HTTP请求中的文件上传。它是org.springframework.web.multipart.MultipartFile接口的实现类的对象,用于表示上传的文件数据。需要注意的是,MultipartFile是Spring框架提供的一种文件上传处理方式,其他的Web框架或编程语言可能会有不同的实现方式。因此,具体的使用方法可能会因框架或语言而异。你还可以将上传的文件保存到服务器的文件系统中,或进行其他的文件处理操作。

qq_52469125的博客 251

论文阅读《Eigen-GNN: A Graph Structure Preserving Plug-in for GNNs》

好久没看论文了,感觉好生疏 关于这篇文章的大致脉络,这篇文章已经介绍过了。

且视他人之疑目如盏盏鬼火,大胆地去走你的夜路 461

宝塔面板全栈部署指南:Node后端+React前端与数据库配置实战

本文提供了一份详尽的宝塔面板全栈部署实战指南,涵盖Node.js后端、React前端与数据库的完整配置流程。文章深入解析了环境准备、数据库创建与导入、Node服务部署、PM2进程守护、React应用构建与托管,以及线上环境变量管理与安全配置等核心步骤,帮助开发者高效、稳定地将项目部署至生产环境。

weixin_29232121的博客 89

获取项目的路径

在jsp和class文件中调用的相对路径不同。如果是调用了s1.getRealPath("")则输出D:\工具\Tomcat-6.0\webapps\002_ext(少了一个"\")(test.txt文件的路径为项目名\src\test.txt,类Test1所在包的第一级目录位于src目录下)(1)类的绝对路径:Class.class.getClass().getResource("/").getPath()输出:t---/E:/order/002_ext/WebRoot/WEB-INF/classes/

满脑子灵感的专栏 1025

AI上推荐 之 逻辑回归模型与GBDT+LR(特征工程模型化的开端)

1. 前言 随着信息技术和互联网的发展, 我们已经步入了一个信息过载的时代,这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战: 信息消费者:如何从大量的信息中找到自己感兴趣的信息? 信息生产者:如何让自己生产的信息脱颖而出, 受到广大用户的关注? 为了解决这个矛盾, 推荐系统应时而生, 并飞速前进,在用户和信息之间架起了一道桥梁,一方面帮助用户发现对自己有价值的信息, 一方面让信息能够展现在对它感兴趣的用户前面。 推荐系统近几年有了深度学习的助推发展之势迅猛, 从前深度学习的传统推荐模型(协

Miracle8070 8251

纯Java配置SpringMvc-JSP-JdbcTemplate

包结构 环境搭建 参考《spring实战》 maven环境项目搭建主要演示搭建springmvc环境,配置数据源,应用JdbcTemplate.,jsp pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan...

盲目的拾荒者的博客 1238

Qt界面美化-飞扬青云自绘控件插件的使用-避免采坑

1、先上一个集成到QtCreater中的效果图: 2、飞扬青云自绘控件插件下载地址:https://gitcode.net/mirrors/feiyangqingyun/qucsdk?utm_source=csdn_github_accelerator 3、集成插件到QtCreater中的方法: (1)、查看自己使用的QtCreater的版本信息,我的:Qt 5.15.2 MSVC2019 64位 (2)插件下载下来后工程预览: 我选择msvc版本的SDK,打开找到匹配的SDK:...

小米的修行之路 2791

深入URP之Shader篇5: SimpleLit Shader分析(1)

本篇开始分析simple lit shader。我们通过分析unlit shader了解了URP shader的结构,以及一些基础功能。而simple lit shader包含了更多的内容。本篇开始,就不会特别仔细的逐行去分析shader文件了,只会针对pass的功能中比较有意思且之前没看到过的内容进行分析。名字为的pass,它的Tags为: 根据URP的文档:说明这是一个前向渲染路径的pass,虽然URP(至少是10.8.1版本)还没有正式支持Deferred Rendering,但URP已经为它打了很多

聚焦游戏和图形引擎开发技术 1901

SpringMVC(24):使用springmvc+spring+jdbc 优化订单管理系统的示例(多文件上传功能的实现)

SpringMVC(23):使用springmvc+spring+jdbc 优化订单管理系统的示例(多文件上传功能的实现)

Diligence is the mother of success. 418

三相五柱式消弧线圈自动测控装置设计与实现

本文设计了一种基于STM32的三相五柱式消弧线圈自动测控装置。该装置采用信号注入法检测系统对地电容电流,通过PID自适应算法调节消弧线圈电感值,实现单相接地故障时的快速补偿。硬件系统包含信号采集、注入、控制执行等模块,软件采用Goertzel算法提取特征频率信号,结合增量式PID实现精确控制。实验结果表明,装置电容检测误差小于2%,调谐响应时间小于50ms,满足配电网对消弧线圈自动调谐的技术要求。

AI的内部世界的博客 238

JAVA计算机毕业设计宠物销售管理系统Mybatis+系统+数据库+调试部署

JAVA计算机毕业设计宠物销售管理系统Mybatis+系统+数据库+调试部署。springboot重大疫情背景下社区互助服务系统。springboot木材产销系统的生产管理模块。springboot老年人日间照料中心管理系统。ssm+sqlserver精品旅游项目管理系统。ssm基于javaweb的家庭财务管理系统。springboot校园资料在线分享网站。springboot校园快递柜存取件系统。

lkkj99的博客 108

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SpringMVC(22):使用springmvc+spring+jdbc 优化订单管理系统的示例(ID修改供应商明细的功能实现)

SpringMVC(22):使用springmvc+spring+jdbc 优化订单管理系统的示例(ID修改供应商明细的功能实现)

Diligence is the mother of success. 847

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

SpringMVC(17):使用springmvc+spring+jdbc 优化订单管理系统的示例(新增用户的功能实现)

SpringMVC(17):使用springmvc+spring+jdbc 优化订单管理系统的示例(新增用户的功能实现)

Diligence is the mother of success. 1547

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

String filePath = request.getSession().getServletContext().getRealPath("/");这句话返回的路径是什么,解释下getRealPa...

request.getSession().getServletContext() 获取的是Servlet容器对象,相当于tomcat容器了。getRealPath("/") 获取实际路径,“/”指代项目根目录,所以代码返回的是项目在容器中的实际发布运行的根路径如:I:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtp...

weixin_34293141的博客 4803

SSM框架中使用文件上传以及IDEA中配置TOMCAT的虚拟路径

在spring 框架中本身存在着这么一个类,你配置完SSM框架,导入了org.springframework.web 这个jar包,就一定存在以下这个类 org.springframework.web.multipart 接下来是完成步骤, 一、将  MultipartFile 对象作为形参加入到add方法中 二、为了实现上传和下载功能,我们需要配置两个路径,真实路径和虚拟路径(下载路径...

SCDN_CP的博客 1万+

SpringMVC(25):使用springmvc 同时上传文件与数据(数据模型或基础类型数据)的示例

SpringMVC(25):使用springmvc 同时上传文件与数据(数据模型或基础类型数据)的示例

Diligence is the mother of success. 1806

ssm(Spring+Spring mvc+mybatis)Spring配置文件——applicationContext.xml

beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://

穆雄雄的博客 611

使用Spring MVC框架改造超市订单系统-1

1.单例模式 1.1单例模式简介 单例模式:系统运行期间,有且仅有一个实例 一个类只有一个实例-----最基本的 只提供私有构造器 它必须自行创建这个实例 定义了静态的该类私有对象 它必须自行向整个系统提供这个实例 提供一个静态的公有方法,返回创建或者获取本身的静态私有对象 1.2懒汉模式 所谓懒汉模式,正如其名”比较懒”,即在类加载时不创建实例,采用延迟加载的方式,在运行调用时创建实例。上述示...

weixin_45499926的博客 577

使用SpringMVC实现文件上传功能

最近做项目多次用到文件上传功能,并且项目底层框架使用的是springMVC,虽不难但容易忘记,在这里记录下(实现多文件动态上传(暂时完成,有缺陷):直接copy项目代码,仅供参考)view页面代码如下:<form:form id="inputForm" modelAttribute="userEnterprise" action="${ctx}/sys/userEnterprise/save" me

orange的博客 5461
上一篇: <转载>初识SSL和SSH:含义与区别
下一篇: SpringMVC(24):使用springmvc+spring+jdbc 优化订单管理系统的示例(多文件上传功能的实现)
后台技术汇
博客等级 码龄11年 670粉丝 531原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后台技术汇

对你的帮助,是对我的最好鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值