当前位置:首页>编程日记>正文

element-ui上传下载excel(超详细der)

本站寻求有缘人接手,详细了解请联系站长QQ1493399855

1. 上传 EXCEL

Upload组件 点击跳转到该组件官方文档

用到的upload组件参数

参数说明类型可选默认值
action 必选参数,上传的地址string------
file-list上传的文件列表array---[]
accept接受上传的文件类型string------
http-request覆盖默认的上传行为function------
limit最大允许上传个数number------
on-exceed文件超出个数限制时的钩子function(files, fileList)------

组件代码

html

<el-uploadstyle="display: inline; margin-left: 10px;margin-right: 10px;"action="":http-request="uploadFile":limit=1:on-exceed="fileExceed"accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel":file-list="uploadList"ref="fileupload">
</el-upload>

--说明--
style: 按项目需要添加,请按需保留
action:必需,自定义上传直接给空串;非自定义,将地址赋给action配合属性headers、on-success、on-error等
http-request:自定义方法,根据请求的响应手动实现on-success、on-error
file-list:本项目有清空需要【代码略】
ref:该上传组件放置dialog中,本项目有置空需求【代码略】,请按需保留

js

import HTTP_API from '@/httpApi' //  封装好的axios:get post请求(含headers和拦截器等【代码略】)// methods
fileExceed () {this.$message.error('别贪心!一次只能上传一个哦~');
},// 请求成功
importSuccess (res) {// 后端的返回码--上传成功if (res.code == xxxxx) {// 显示√图标let e = document.getElementsByClassName('el-upload-list__item-status-label');e[0].setAttribute('style', 'display:block !important')// 成功提示this.$message.success('上传成功');// 重新调用列表请求(代码略)this.getList();// 后端的返回码--上传失败} else {// 隐藏√图标let e = document.getElementsByClassName('el-upload-list__item-status-label');e[0].setAttribute('style', 'display:none !important')// 失败提示--及后端返回的失败详情this.$message.error({dangerouslyUseHTMLString: true,duration: 4500,message: res.remark+',<br/>请删除上传失败的文件,修改后重新上传'});}
},// 请求失败
importError (err) {this.$message.error({dangerouslyUseHTMLString: true,duration: 4500,message: '上传出现异常,请稍后重试'+',<br/><br/>异常原因:'+err});
},// 自定义上传
uploadFile (item) {const form = new FormData()form.append('file', item.file)HTTP_API.xlsx_upload(form).then(res => {this.importSuccess(res)}).catch(err => {this.importError(err)})
}

2. 下载 EXCEL(远程地址/文档流)

button组件

组件代码

html

<el-button type="primary" @click="downTemplate" round>下载模板</el-button>

js--后端返回下载地址

import axios from 'axios'// methods
// 导出模板
downTemplate () {axios({method: 'get',url:'xxx相对地址xxx',responseType: 'blob'}).then(res => this.downloads(res.data, res.headers.filename))
},// 创建模板下载链接
downloads (data, name){if(!data){return}let url = window.URL.createObjectURL(new Blob([data]))let link = document.createElement('a')link.style.display ='none'link.href = urllink.setAttribute('download', `前端拼接后端返回的名字${name}.xlsx`)document.body.appendChild(link)link.click()document.body.removeChild(link)window.URL.revokeObjectURL(url)
},

js--后端返回文档流

import HTTP_API from '@/httpApi' //  封装好的axios:get post请求(含headers和拦截器等【代码略】)// methods
// 导出excel
let selectedParams = {ids : this.idList.join(',')    //导出条件(按照选中的ID来导出,按实际需求)
}
// 解决文档流乱码问题设置响应类型
HTTP_API.exportSelected(selectedParams, {responseType: 'arraybuffer'}).then(res => {let url = window.URL.createObjectURL(new Blob([res], {type: "application/vnd.ms-excel;charset=UTF-8"}))let link = document.createElement('a')link.style.display ='none'link.href = urllink.setAttribute('download', '记录列表.xls')document.body.appendChild(link)link.click()document.body.removeChild(link)window.URL.revokeObjectURL(url)
});

3. 结束语

  1. 上传action必须有,空串也好,随便写点也行,反正得有
  2. element的提示允许html代码,但是要设置dangerouslyUseHTMLString为true
  3. 上传的请求成功(状态码200)不等于上传成功,element的√图标,需要用js实现显示隐藏
  4. 下载时文件名称为动态时,请求后端协助在响应的头部增加filename字段(filename字段中含文字会有问题,后端给我日期数字,相同的文字部分前端拼接)
  5. responseType设置为blob或者arraybuffer从结果上是一样的。点击跳转responseType文档

http://www.coolblog.cn/news/39494f475d4c7920.html

相关文章:

  • asp多表查询并显示_SpringBoot系列(五):SpringBoot整合Mybatis实现多表关联查询
  • s7day2学习记录
  • 【求锤得锤的故事】Redis锁从面试连环炮聊到神仙打架。
  • 矿Spring入门Demo
  • 拼音怎么写_老师:不会写的字用圈代替,看到孩子试卷,网友:人才
  • Linux 实时流量监测(iptraf中文图解)
  • Win10 + Python + GPU版MXNet + VS2015 + RTools + R配置
  • 美颜
  • shell访问php文件夹,Shell获取某目录下所有文件夹的名称
  • 如何优雅的实现 Spring Boot 接口参数加密解密?
  • LeCun亲授的深度学习入门课:从飞行器的发明到卷积神经网络
  • 法拉利虚拟学院2010 服务器,法拉利虚拟学院2010
  • Mac原生Terminal快速登录ssh
  • 支撑微博千亿调用的轻量级RPC框架:Motan
  • mysql commit 机制_1024MySQL事物提交机制
  • java受保护的数据与_Javascript类定义语法,私有成员、受保护成员、静态成员等介绍...
  • 2019-9
  • jquery 使用小技巧
  • 科学计算工具NumPy(3):ndarray的元素处理
  • vscode pylint 错误_将实际未错误的py库添加到pylint白名单
  • 工程师在工作电脑存 64G 不雅文件,被公司开除后索赔 41 万,结果…
  • linux批量创建用户和密码
  • js常用阻止冒泡事件
  • 气泡图在开源监控工具中的应用效果
  • newinsets用法java_Java XYPlot.setInsets方法代碼示例
  • 各类型土地利用图例_划重点!国土空间总体规划——土地利用
  • php 启动服务器监听
  • dubbo简单示例
  • Ubuntu13.10:[3]如何开启SSH SERVER服务
  • [iptables]Redhat 7.2下使用iptables实现NAT
  • Django View(视图系统)
  • 【设计模式】 模式PK:策略模式VS状态模式
  • JS实现-页面数据无限加载
  • CSS小技巧——CSS滚动条美化
  • 最新DOS大全
  • 阿里巴巴分布式服务框架 Dubbo
  • 阿里大鱼.net core 发送短信
  • Sorenson Capital:值得投资的 5 种 AI 技术
  • 程序员入错行怎么办?
  • Arm芯片的新革命在缓缓上演
  • 两张超级大表join优化
  • 第九天函数
  • Linux软件安装-----apache安装
  • HDU 5988 最小费用流
  • 通过Spark进行ALS离线和Stream实时推荐
  • 《看透springmvc源码分析与实践》读书笔记一
  • nagios自写插件—check_file
  • python3 错误 Max retries exceeded with url 解决方法
  • 正式开课!如何学习相机模型与标定?(单目+双目+鱼眼+深度相机)
  • 行为模式之Template Method模式