博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
element-ui上传下载excel(超详细der)
阅读量:6760 次
发布时间:2019-06-26

本文共 3203 字,大约阅读时间需要 10 分钟。

1. 上传 EXCEL

Upload组件

用到的upload组件参数

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

组件代码

html

--说明--

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和拦截器等【代码略】)// methodsfileExceed () {  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+',
请删除上传失败的文件,修改后重新上传' }); }}, // 请求失败importError (err) { this.$message.error({ dangerouslyUseHTMLString: true, duration: 4500, message: '上传出现异常,请稍后重试'+',
异常原因:'+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

下载模板

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 = url  link.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// 导出excellet 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 = url  link.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从结果上是一样的。

转载地址:http://zobeo.baihongyu.com/

你可能感兴趣的文章
WEB SSH Ajaxterm客户端
查看>>
serialVersionUID 作用
查看>>
servlet接收get请求参数乱码
查看>>
mysql常用授权
查看>>
MySQL复制常见问题
查看>>
javascript时间格式化
查看>>
我的友情链接
查看>>
Spring MVC基础
查看>>
Keepalived+LVS+Mysql-Cluster(7.1.10)架构方案
查看>>
JavaScript权威指南笔记
查看>>
R语言分析nginx日志
查看>>
分布式系统关注点——先写DB还是「缓存」?
查看>>
三星I9220刷机失败解决办法
查看>>
PHP 扩展支持之 redis
查看>>
java web 获取客户端实际Ip地址 实例
查看>>
搭建Debian7&&openstack私有源
查看>>
java util Date与java sql Date区别
查看>>
近期踩过的坑
查看>>
android启动activity文本框不获得焦点
查看>>
[数据结构]原创!amor详解 二叉排序树的使用以及理解
查看>>