Spring Boot+Element 文件随表单上传文件 同步上传

业务逻辑里需要先添加记录再通过添加记录sql操作完返回的id来生成相应唯一的文件名,el-upload不自动上传有些坑下面描述一下

<el-upload
:action="uploadUrl()"
:on-remove="handleRemove"
:before-upload="beforeAvatarUpload"
:on-success="handleAvatarSuccess"
:on-error="uploadFalse"
:http-request="httpRequest"
:on-change="fileChange"
 multiple
:limit="1"
:auto-upload="false"
:on-exceed="handleExceed"
:file-list="fileList">
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
</el-upload>

因为el-upload那个带图片预览的控件必须上传成功返回URL才能生成预览,所以这种同步上传的就不能用那个带预览的el-upload了。

先关掉自动上传:auto-upload="false" 然后设置

:http-request="httpRequest"来指定el-upload上传时候触发的方法

action直接写后台的控制器路径也行可以不写方法

limit 顾名思义限制上传的文件数量

:on-remove之类的就是对应操作响应的方法看实在不懂可以看element的官方手册里的el-upload都有写

file-list就是指定文件存放的数组

我的想法是在表单验证过了之后调用httpRequest方法把表单和文件一起上传就能同步上传

					SubmitForm : function (formName){
						this.$refs[formName].validate((valid) => {
							if (valid) {
								if(this.file==null){
									this.$message.error('必须上传图片');
								}else{
									this.httpRequest();
								}
							} else {
								this.$message.error('填入的信息有误');
								return false;
							}
						});
					},

因为在控件选择文件的时候触发了fileChange方法把文件和文件list对象赋值到了Vue的变量里所以在表单验证通过的时候要判断一下文件是否为空因为删除方法里需要删除文件

fileChange:function(file,fileList){
	this.file=file;
	this.fileList = fileList;
},

 因为我只上传单个文件所以就删一个文件如果是文件list自己添加相应代码就行

handleRemove: function(file){
	this.file=null;
},

限制文件数量的函数

handleExceed:function(files, fileList){
	this.$message.warning(`当前限制选择 1 个文件`);
}

最重要的httpRequest()方法用来随表单一起上传文件有几个重要的ajax设置

httpRequest:function(param){
	  let url = ""
	  let fd = new FormData()// FormData 对象
	  fd.append('file', this.file.raw)// 这点很关键因为el-upload对文件对象包了一层所以必须.raw才是文件
	  //不然在spring boot 控制器接不到文件会接到一个字符串叫"object"
	  fd.append('something', this.ruleForm.something)// 随文件一起上传的表单数据
	  //必须设置contentType:false, 不然springboot会报 the request was rejected because no multipart boundary was found
	  //服务器会找不到分割表单内容的参数
	  //把processData设置为false 让jquery不要处理表单不然jquery会把变的转换成字符串
	  //cache: false, 加不加应该无所谓 因为post是不走缓存的
	  //async: false 应该也不重要 同步异步应该都行
	$.ajax({
		url:url,
		type:"post",
		processData:false,
		async: false,
		cache: false, 
		contentType:false,
		data:fd,
		success: res => {
			console.log(res);
			if (res.code == 200) {
				this.$message({
					message: res.msg,
					type: 'success'
				});
			} else {
				this.$message.error(res.msg);
			}
		}
	});
},

然后在spring boot 控制器方法只要添加参数

 @RequestParam("file") MultipartFile filename,HttpServletRequest request

就能接到表单文件然后表单其他参数就request接收 接下来就能做操作了

看了这个老兄的播客 茅塞顿开的 地址也附上https://www.cnblogs.com/shihaiming/p/10410562.html

Spring Boot是一款用于简化Spring应用程序开发的框架,它采用了约定优于配置的原则,可以快速构建独立的、基于Java的企业级应用程序。它集成了很多常用的技术和组件,支持快速开发、测试和部署。 Vue是一款用于构建用户界面的渐进式框架,通过使用组件化的方式来构建复杂的前端应用程序。它的设计理念是简单灵活,易于学习和使用。Vue使用了虚拟DOM技术,能够高效地处理大规模的数据操作和界面更新。 Element UI是一款基于Vue.js的桌面端组件库,提供了一套丰富的UI组件,可以快速构建美观的用户界面。Element UI的设计风格简洁大方,适用于各种不同的应用场景。它提供了大量的组件和功能,如表单验证、数据表格、弹窗等,满足了商城系统的各种需求。 结合Spring Boot、Vue和Element UI,我们可以构建一个功能完善的商城系统。Spring Boot作为后端框架,负责处理业务逻辑和数据处理,提供了接口供前端调用。Vue作为前端框架,负责展示用户界面和与后端接口进行交互。Element UI作为前端组件库,提供了丰富的UI组件,可以帮助我们构建漂亮的商城界面。 例如,我们可以使用Spring Boot来实现用户注册、登录、商品管理等功能,并提供相应的接口供前端调用。Vue可以负责展示用户界面,如商品列表、购物车、订单管理等,同时通过调用后端接口获取数据。Element UI可以用来构建漂亮的界面,并提供了很多常用的组件,如表单、弹窗、数据表格等,可以让用户有更好的体验。 总之,Spring Boot、Vue和Element UI的结合,可以帮助我们快速构建一个功能强大、用户友好的商城系统,提供完整的用户界面和后端功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值