Vue Element UI 实现文件excel的上传及下载2种方式(文件流及a标签)
2020-06-18 16:48
1841 查看
工作上需求上传excel,下载源文件excel,上传使用的是Element ui 里的 el-upload,下载说2种方式,亲测都可以
项目样式 上传excel
html 部分
<el-form-item label="上传"> <el-upload class="upload-demo" ref="upload" action="#" :limit="1" :http-request="uploadOk" :on-preview="handlePreview" :before-upload="beforeAvatarUpload" :on-remove="handleRemove" :file-list="fileList" :auto-upload="true"> <el-button slot="trigger" size="small" type="primary">选取文件</el-button> <div slot="tip" class="el-upload__tip">只能上传xls/xlsx文件</div> </el-upload> </el-form-item>
参数解释 方法解释
action 必选参数,上传的地址
:limit 最大允许上传个数
:http-request 覆盖默认的上传行为,自定义上传
:on-preview 文件上传时的钩子
:before-upload 上传文件之前的钩子
:on-remove 文件列表移除文件时的钩子
:file-list 上传的文件列表
:auto-upload 是否在选取文件后立即进行上传
JS 事件部分
// 上传前验证 beforeAvatarUpload(file) { let Xls = file.name.split('.'); if(Xls[1] === 'xls'||Xls[1] === 'xlsx'){ return file }else { this.$message.error('上传文件只能是 xls/xlsx 格式!') return false } }, handleRemove(file, fileList) { console.log(file, fileList); }, handlePreview(file) { console.log(file); }, // 上传成功 uploadOk(val){ let fd = new FormData() fd.append('upload_file',val.file) fd.append('dir_name','contract') // console.log(fd.upload_file) 错误 // console.log(fd.get("upload_file") 正确 this.$post('/upload/uploadFile', fd).then((result) => { if (result.code == 200) { this.$message({ message: '上传成功', type: 'success' }); // 接收excel文件地址 this.addForm.addurl = result.data.file_url }else{ this.message(result.msg) } }) },
注意一下:上传文件必须为FormData 所以这边New FormData() ,把上传文件的File填进去。
注意一点 打印console.log(FormData.file) 是打印不出来的 ,需要用 到 FormData.get(’’) !!!!是个坑 是个坑
下载a标签方式
// 下载源文件 handleDownload: function(index, row){ if(row.contract_file_url == ''){ this.$message({ message: '没有源文件', type: 'warning' }) }else{ // 创建a标签 let link = document.createElement('a') // href链接 link.setAttribute('href', row.contract_file_url) // 自执行点击事件 link.click() } },
row.contract_file_url 是我从表格里拿到的下载文件地址
文件流方式
如果后台传给你的是这种东西 不要慌 你只需要
this.$get('/documentflow').then(res => { let blob = new Blob([res], {type: "application/vnd.ms-excel"}); //res 就是文件流了 let objectUrl = URL.createObjectURL(blob); window.location.href = objectUrl })
这样就ok了 大胆的测试一下吧
总结
有问题欢迎留言私信,也可以留下更好的方案和思路,一起学习完善。
对你有帮助的话可以点个赞哦!!!
相关文章推荐
- springboot+vue+element ui(upload+download)实现excel上传及下载(附带通过网关、前端获取token封装和携带请求方式)
- Spring Boot + Vue Element实现Excel文件上传、解析、下载(含完整实现过程)
- Vue实现Excel模板文件的上传与下载
- 关于vue+element ui 实现上传文件
- vue2.0 使用element-ui里的upload组件实现多图上传。采用FORMDATA的方式上传。
- Vue上传文件:ElementUI中的upload实现
- vue+elementui的table行内实现el-upload文件添加/多文件上传
- vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
- Vue Element UI + OSS实现上传文件功能
- Vue 结合element -ui实现多文件上传到后台并显示进度条
- vue -element-ui 文件上传upload 组件 实现 及其后台
- 文件一键上传、汉字转拼音、excel文件上传下载功能模块的实现
- POI实现Excel文件上传下载,读/写数据库(poi)
- vue+elementUI表格下载为excel
- Servlet方式实现文件的上传和下载
- Django+vue实现excel文件上传及下载
- Java 使用ftp的方式上传文件到linux,并实现删除,下载
- vue-cli + ElementUI 实现自定义接口上传图片
- 在element-ui + axios中,使用formData实现文件上传
- vue+ elmentUI实现form表单中文件、图片的上传