【Vue】vue2上传Excel表格到后台 实战教程(接上一篇下载Excel模板表格到本地)

参考文章
作者原文链接入口

项目场景:

关于数据新增,需要从后台下载一个Excel表格,然后在表格里面添加数据,再上传给后台,后台做解析处理,往数据库添加数据


问题描述

需要用到elementUI的文件上传,这里我使用的是拖拽上传
在这里插入图片描述

官方代码
elementUI直达车

<el-upload
  class="upload-demo"
  drag
  action="https://jsonplaceholder.typicode.com/posts/"
  multiple>
  <i class="el-icon-upload"></i>
  <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
  <div class="el-upload__tip" slot="tip">只能上传jpg/png文件,且不超过500kb</div>
</el-upload>

原因分析:

elementUI没有那么多的项目案例,搜索了大量的文章,上传做好了

我们需要对上传的文件进行判定是否为Excel表格,以及上传回调。


解决方案:

首先实现页面展示

在这里插入图片描述

我这里实现的是,点击新增,然后弹出框显示上传接口,如图所示,如果是编辑,那就是表单。

<el-upload class="upload-demo" :show-file-list='false' :on-success="uploadSuccess"
		   :before-upload="beforeAvatarUpload" drag style="text-align: center;" :action="uploadFile()">
		<i class="el-icon-upload"></i>
		<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
		<div class="el-upload__tip" slot="tip">只能上传Excel表格文件</div>
</el-upload>
  1. :show-file-list='false'不显示文件列表
  2. :before-upload="beforeAvatarUpload"上传之前判定文件类型
  3. :on-success="uploadSuccess"上传成功回调函数
  4. :action="uploadFile()"其实这里可以直接填路径,这里做了一个函数返回值来表示路径

js代码

// 上传文件路径 /api是处理跨域请求的重定向 
uploadFile() {
	return '/api/admin/Export/importProject'
},
// 上传前对文件的格式和大小的判断
beforeAvatarUpload(file) {
	const extension = file.name.split(".")[1] === "xls";
	const extension2 = file.name.split(".")[1] === "xlsx";
	const isLt2M = file.size / 1024 / 1024 < 10;
	if (!extension && !extension2) {
		this.$message({
			message: '上传模板只能是 xls、xlsx格式!',
			type: 'error'
		});
		return false // return false就不会走上传接口
	}
	if (!isLt2M) {
		console.log("上传模板大小不能超过 10MB!");
		this.$message({
			message: '上传模板大小不能超过 10MB!',
			type: 'error'
		});
		return false
	}
	// return extension || extension2 || extension3 || (extension4 && isLt2M);
	return extension || extension2 // 必须要有返回值
},
// 上传成功回调
uploadSuccess(response, file, fileList) {
	console.log(response, file, fileList, 'ok')
	this.dialogVisible = false // 关闭弹出框,如果没有可以删除
	if (response.code == 1) { // 返回值为1表示上传成功
		this.$message({
			message: response.msg,
			type: 'success'
		});
		this.getList() // 上传成功之后重新查询列表
	} else {
		this.$message({
		message: response.msg,
		type: 'error'
		});
	}
},

测试结果

在这里插入图片描述
现在对上传进行测试,准备了一个txt文本和一个Excel表格。
先上传txt文本
在这里插入图片描述
第一句话是我判定的,但是第二句话是后台发过来的,说明上传文件没走上传判定的方法
开始检查

刚刚检查发现没有走判定方法,发现是我的返回值,没有设置为false,在这个上传之前的回调函数里面。必须有一个返回值,如果为false,则不进行上传,为true就会进行上传。刚刚就是return的是提示语句,没有return false。
缺少这个returun false就会出错在这里插入图片描述

现已做好了修改,代码没有问题可复制拿去使用

关于接口 /api

在这里插入图片描述
因为要处理跨域,所以接口请求需要设置,然后再vue.conifg.js里面设置后端接口

这里是引用
target就是后端接口

所以要访问到后端,我在请求路径那里加了 /api 。
为啥不用process.env.VUE_APP_BASE_API呢?若依的项目都是这样写的。
额这个属于是我水平还不够,暂时还达不到这个能力。

Excel文件上传到后台就做好了。(对接后台是php,非java)

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
要在Vue2中导出数据到Excel表格,可以使用vue-json-excel插件。您可以在Vue组件中编写以下方法来实现导出功能: ```javascript export2Excel() { require.ensure([], () => { const { export_json_to_excel } = require('@/excel/Export2Excel'); const header = ['索引', '用户名', '密码']; // 表格的表头 const filterVal = ['index', 'username', 'password']; // 表格的数据字段 const data = this.tableData.map(v => filterVal.map(j => v[j])); // 格式化数据 export_json_to_excel(header, data, '用户列表'); // 导出Excel文件 }); } ``` 其中,`header`是导出数据的表头,`filterVal`是导出数据的字段,`data`是需要导出的具体数据。通过调用`export_json_to_excel`方法,可以将数据导出到Excel文件中。 请注意,您需要在项目中安装`vue-json-excel`插件,并将`Export2Excel.js`文件放置在`@/excel/`目录下,以便引入`export_json_to_excel`方法。 希望对您有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Vue2中导出Excel](https://blog.csdn.net/qq_40323256/article/details/111305117)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Vue2.0---将页面中表格数据导出excel (详细)](https://blog.csdn.net/weixin_33832340/article/details/94321173)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿民不加班

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值