Element-UI中Upload上传文件前端缓存处理示例


Posted in Javascript onFebruary 21, 2019

Element-UI对于文件上传组件的功能点着重于文件传递到后台处理,所以要求action为必填属性。

但是如果需要读取本地文件并在前端直接处理,文件就没有必要传递到后台,比如在本地打开一个JSON文件,利用JSON文件在前端进行动态展示等等。

下面就展示一下具体做法:

首先定义一个jsonContent, 我们的目标是将本地选取的文件转换为JSON赋值给jsonContent

然后我们的模板文件是利用el-dialog和el-upload两个组件组合:这里停止文件自动上传模式:auto-upload="false"

<el-button type="primary" @click="dialogVisible = true">Load from File</el-button>
 <el-dialog title="Load JSON document from file" :visible.sync="dialogVisible">
  <el-upload :file-list="uploadFiles" action="alert" :auto-upload="false" multiple :on-change="loadJsonFromFile">
   <el-button size="small" type="primary">Select a file</el-button>
   <div slot="tip">upload only jpg/png files, and less than 500kb</div>
  </el-upload>
  <span slot="footer">
   <el-button type="primary" @click="dialogVisible = false">cancel</el-button>
   <el-button type="primary" @click="loadJsonFromFileConfirmed">confirm</el-button>
  </span>
 </el-dialog>

最后通过html5的filereader对变量uploadFiles中的文件进行读取并赋值给jsonContent

if (this.uploadFiles) {
    for (let i = 0; i < this.uploadFiles.length; i++) {
     let file = this.uploadFiles[i]
     console.log(file.raw)
     if (!file) continue
     let reader = new FileReader()
     reader.onload = async (e) => {
      try {
       let document = JSON.parse(e.target.result)
       console.log(document)
      } catch (err) {
       console.log(`load JSON document from file error: ${err.message}`)
       this.showSnackbar(`Load JSON document from file error: ${err.message}`, 4000)
      }
     }
     reader.readAsText(file.raw)
    }
   }

为方便测试,以下是完整代码:

<template>
 <div>
  <el-button type="primary" @click="dialogVisible = true">Load from File</el-button>
 <el-dialog title="Load JSON document from file" :visible.sync="dialogVisible">
  <el-upload :file-list="uploadFiles" action="alert" :auto-upload="false" multiple :on-change="loadJsonFromFile">
   <el-button size="small" type="primary">Select a file</el-button>
   <div slot="tip">upload only jpg/png files, and less than 500kb</div>
  </el-upload>
  <span slot="footer">
   <el-button type="primary" @click="dialogVisible = false">cancel</el-button>
   <el-button type="primary" @click="loadJsonFromFileConfirmed">confirm</el-button>
  </span>
 </el-dialog>
</div>
 
</template>
 
<script>
export default {
 data () {
  return {
   // data for upload files
   uploadFilename: null,
   uploadFiles: [],
   dialogVisible: false
  }
 },
 methods: {
  loadJsonFromFile (file, fileList) {
   this.uploadFilename = file.name
   this.uploadFiles = fileList
  },
  loadJsonFromFileConfirmed () {
   console.log(this.uploadFiles)
   if (this.uploadFiles) {
    for (let i = 0; i < this.uploadFiles.length; i++) {
     let file = this.uploadFiles[i]
     console.log(file.raw)
     if (!file) continue
     let reader = new FileReader()
     reader.onload = async (e) => {
      try {
       let document = JSON.parse(e.target.result)
       console.log(document)
      } catch (err) {
       console.log(`load JSON document from file error: ${err.message}`)
       this.showSnackbar(`Load JSON document from file error: ${err.message}`, 4000)
      }
     }
     reader.readAsText(file.raw)
    }
   }
   this.dialogVisible = false
  }
 }
}
</script>

PS: 相关阅读

https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 全角转换实现代码
Jul 17 Javascript
js实现的折叠导航示例
Nov 29 Javascript
JS+CSS实现可拖拽的漂亮圆角特效弹出层完整实例
Feb 13 Javascript
javascript实现倒计时跳转页面
Jan 17 Javascript
jQuery实现返回顶部功能
Feb 23 Javascript
IE9 elementUI文件上传的问题解决
Oct 17 Javascript
jQuery.validate.js表单验证插件的使用代码详解
Oct 22 jQuery
Vue框架TypeScript装饰器使用指南小结
Feb 18 Javascript
浅谈JS和jQuery的区别
Mar 27 jQuery
vue-cli3中vue.config.js配置教程详解
May 29 Javascript
layui+SSM的数据表的增删改实例(利用弹框添加、修改)
Sep 27 Javascript
Vertx基于EventBus发送接受自定义对象
Nov 16 Javascript
详解Puppeteer前端自动化测试实践
Feb 21 #Javascript
javascript中join方法实例讲解
Feb 21 #Javascript
React 组件渲染和更新的实现代码示例
Feb 21 #Javascript
vue图片上传本地预览组件使用详解
Feb 20 #Javascript
Vue 后台管理类项目兼容IE9+的方法示例
Feb 20 #Javascript
浅谈小程序 setData学问多
Feb 20 #Javascript
9102年webpack4搭建vue项目的方法步骤
Feb 20 #Javascript
You might like
CentOS 上搭建 PHP7 开发测试环境
2017/02/26 PHP
解决laravel(5.5)访问public报错的问题
2019/10/12 PHP
javascript JSON操作入门实例
2010/04/16 Javascript
基于jquery的实现简单的表格中增加或删除下一行
2010/08/01 Javascript
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
2011/10/29 Javascript
深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
2012/01/15 Javascript
40个新鲜出炉的jQuery 插件和免费教程[上]
2012/07/24 Javascript
JavaScript 布尔操作符解析  &amp;&amp; || !
2012/08/10 Javascript
浅谈document.write()输出样式
2015/05/07 Javascript
jquery+ajax请求且带返回值的代码
2015/08/12 Javascript
jquery实现简易的移动端验证表单
2015/11/08 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
2016/06/17 Javascript
关于input全选反选恶心的异常情况
2016/07/24 Javascript
微信小程序 Video API实例详解
2016/10/02 Javascript
Nodejs进阶之服务端字符编解码和乱码处理
2017/09/04 NodeJs
JavaScript学习笔记之函数记忆
2017/09/06 Javascript
用JS实现选项卡
2020/03/23 Javascript
[40:50]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第四场
2014/05/24 DOTA
Django rest framework基本介绍与代码示例
2018/01/26 Python
Python安装whl文件过程图解
2020/02/18 Python
python程序输出无内容的解决方式
2020/04/09 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
2020/05/25 Python
python 元组的使用方法
2020/06/09 Python
Django def clean()函数对表单中的数据进行验证操作
2020/07/09 Python
Brookstone美国官网:独特新奇产品
2017/03/04 全球购物
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
如果NULL定义成#define NULL((char *)0)难道不就可以向函数传入不加转换的NULL了吗
2012/02/15 面试题
应届毕业生自我评价分享
2013/12/15 职场文书
高中教师考核方案
2014/05/18 职场文书
共青团员自我评价范文
2014/09/14 职场文书
感谢信的格式
2015/01/21 职场文书
2015年个人招商工作总结
2015/04/25 职场文书
毕业论文答辩开场白和结束语
2015/05/27 职场文书
2016国庆节67周年红领巾广播稿
2015/12/18 职场文书
初三英语教学反思
2016/02/15 职场文书
各类场合主持词开场白范文集锦
2019/08/16 职场文书