在Vue项目中导入excel表失败怎么回事,如何处理
Admin 2022-07-13 群英技术资讯 1086 次浏览
有这么一个需求:一个导入按钮,点击按钮导入excel表,如果excel表中部分数据导入失败,则自动下载该部分导入失败数据的excel表,如果全部导入成功,则提示“导入成功”。
首先附上ElementUI的上传文件组件
Element - The world's most popular Vue UI framework
Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库
https://element.eleme.cn/#/zh-CN/component/upload
官网详细介绍upload
组件的属性和使用方法,就不展开了,这里主要通过使用它实现开篇的导入excel表的需求。(在vue项目中需要引入ElementUI
库,详细步骤请查阅官网)
<el-upload class="upload-demo" action="https://jsonplaceholder.typicode.com/posts/" multiple :auto-upload="false" :file-list="fileList" :on-change="fileChange"> <el-button type="primary">导入</el-button> </el-upload>
页面效果
属性 | 说明 | 类型 |
---|---|---|
action | 必选参数,上传的地址 | string |
multiple | 是否支持多选文件 | boolean |
auto-upload | 是否在选取文件后立即进行上传 | boolean |
auto-upload我们设置为false,避免自动上传,以便使用自定义上传方式。 | ||
file-list | 上传的文件列表, 例如: [{name: 'food.jpg', url: 'https://xxx.cdn.com/xxx.jpg'}] | array |
on-change | 文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用 | function(file, fileList) |
此时可以通过fileChange
方法在控制台打印查看文件结构
fileChange(file,fileList){ console.log(file,'file') console.log(fileList,'fileList') }
fileChange(file,fileList){ console.log(file,'file') console.log(fileList,'fileList') let url = 'xxx' //后端服务器API let headers = { 'Content-Type':'multipart/form-data' //自定义上传时,该请求头参数必填 } let formData = '' for(let i = 0;i < fileList.length;i++){ //遍历文件数组,fileList有可能存在多个文件 formData = new FormData() formData.append('name',fileList[i].name) formData.append('type','.xlsx') formData.append('file',fileList[i].raw) } this.$axios({ headers: headers, method: 'post', data: formData, url: url, responseType:'blob' //该参数必填,不然下载下来的excel表会提示文件损坏,无法打开 }).then(res=>{ if(res && res.data.size == 0){ //若后台不返回流,说明全部数据导入成功,提示“导入成功”,不自动下载 return } //如果后台返回流,说明部分数据导入失败,则自动下载导入失败数据的excel表 let name = '导入失败数据.xlsx' //自定义下载excel表名 let blob = new Blob([res.data]) let url = window.URL.createObjectURL(blob) let aLink = document.createElement('a') aLink.style.display = 'none' aLink.href = url //download 属性定义了下载链接的地址。href 属性必须在 <a> 标签中指定。 aLink.setAttribute('download',name) document.body.appendChild(aLink) aLink.click() document.body.removeChild(aLink) window.URL.revokeObjectURL(url) //下载结束之后可以执行其他操作,如刷新列表、友好提示等 }) }
formData
是ajax2.0(XMLHttpRequest Level2)新提出的接口,利用FormData
对象可以将form
表单元素的name
与value
进行组合,实现表单数据的序列化,从而进行表单元素的拼接,提高工作效率。append
向FormData
中添加新的属性值,如果FormData
对应的属性值存在则覆盖原值,否则新增一项属性值。
Blob
对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换成 ReadableStream
来用于数据操作。
URL.createObjectURL()
静态方法会创建一个 DOMString
,其中包含一个表示参数中给出的对象的URL。这个 URL 的生命周期和创建它的窗口中的 document
绑定。这个新的URL 对象表示指定的 File
对象或 Blob
对象。
URL.revokeObjectURL()
静态方法用来释放一个之前已经存在的、通过调用 URL.createObjectURL()
创建的 URL 对象。当你结束使用某个 URL 对象之后,应该通过调用这个方法来让浏览器知道不用在内存中继续保留对这个文件的引用了。
总结:以上实现了自定义导入excel表,且自动下载接口返回的流,代码可以直接使用,但是请注意返回的数据response
不一定与我的相同,具体看联调接口的返回数据。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要给大家分享vue实现点击切换图片效果的内容,切换图片的效果在很多网站上都是比较常见的,小编觉得比较实用,因此分享给大家做个参考,感兴趣的朋友可以看看,希望大家阅读完这篇文章能有所收获,下面我们一起来学习一下吧。
这篇文章主要为大家详细介绍了Vue实现简易购物车页面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这篇文章我们来了解jQuery去掉td里的内容的方法。这里我们可以使用html()方法来去掉td里的内容,具体的实现方法及代码如下,有需要的朋友可以参考,接下来就跟随小编来一起学习一下吧!
原生JS编写时哪些写法要避免?我们知道原生JS编写是有规范和要求的,而且有良好的代码编写习惯也是很重要的,对此本文就给大家来介绍一下原生JS中应该禁止出现的几种写法,感兴趣的朋友可以了解看看。
方法:1、利用var语句声明两个变量并赋值,语法为“var a=数值1;var b=数值2;”;2、利用“*”相乘运算符计算两个变量的乘积,语法为“var res=a*b;”;3、利用alert()方法将计算结果输出即可。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008