详解Element-UI中上传的文件前端处理


Posted in Javascript onAugust 07, 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)
    }
   }

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

另外一篇文章是介绍如何将jsonContent变量中的JSON对象保存到本地文件

<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>

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

Javascript 相关文章推荐
网页源代码保护(禁止右键、复制、另存为、查看源文件)
May 23 Javascript
javascript将数组插入到另一个数组中的代码
Jan 10 Javascript
Javascript中3个需要注意的运算符
Apr 02 Javascript
JS基于cookie实现来宾统计记录访客信息的方法
Aug 04 Javascript
详解webpack3编译兼容IE8的正确姿势
Dec 21 Javascript
vue filters的使用详解
Jun 11 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
Feb 25 Javascript
简单通过settimeout看javascript的运行机制
May 10 Javascript
javascript获取元素的计算样式
May 24 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
Sep 17 Javascript
vue父子模板传值问题解决方法案例分析
Feb 26 Javascript
vue实现tab栏点击高亮效果
Aug 19 Javascript
element-ui中Table表格省市区合并单元格的方法实现
Aug 07 #Javascript
Vue+Typescript中在Vue上挂载axios使用时报错问题
Aug 07 #Javascript
更优雅的微信小程序骨架屏实现详解
Aug 07 #Javascript
vue 集成jTopo 处理方法
Aug 07 #Javascript
vue 集成 vis-network 实现网络拓扑图的方法
Aug 07 #Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
Aug 07 #Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
Aug 07 #Javascript
You might like
一道关于php变量引用的面试题
2010/08/08 PHP
PHP日期处理函数 整型日期格式
2011/01/12 PHP
php.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
2012/07/01 PHP
php通过前序遍历树实现无需递归的无限极分类
2015/07/10 PHP
PHP中的访问修饰符简单比较
2019/02/02 PHP
jquery下利用jsonp跨域访问实现方法
2010/07/29 Javascript
JS面向对象编程之对象使用分析
2010/08/19 Javascript
JavaScript 判断浏览器是否支持SVG的代码
2013/03/21 Javascript
jquery ajax同步异步的执行最终解决方案
2013/04/26 Javascript
jQuery焦点图切换特效插件封装实例
2013/08/18 Javascript
javascript判断数组内是否重复的方法
2015/04/21 Javascript
jQuery的Scrollify插件实现滑动到页面下一节点
2015/07/05 Javascript
jQuery实现的进度条效果
2015/07/15 Javascript
JS特效实现图片自动播放并可控的效果
2015/07/31 Javascript
js日期插件dateHelp获取本月、三个月、今年的日期
2016/03/07 Javascript
Bootstrap 实现查询的完美方法
2016/10/26 Javascript
一个可复用的vue分页组件
2017/05/15 Javascript
Vue学习笔记进阶篇之单元素过度
2017/07/19 Javascript
Angular2进阶之如何避免Dom误区
2018/04/02 Javascript
JavaScript解析及序列化JSON的方法实例分析
2019/01/04 Javascript
js实现随机数小游戏
2019/06/28 Javascript
jQuery操作事件完整实例分析
2020/01/10 jQuery
使用js实现单链解决前端队列问题的方法
2020/02/03 Javascript
[01:39]2014DOTA2国际邀请赛 Newbee经理CU专访队伍火力全开
2014/07/15 DOTA
Python中for循环控制语句用法实例
2015/06/02 Python
安装python时MySQLdb报错的问题描述及解决方法
2018/03/20 Python
Python实用库 PrettyTable 学习笔记
2019/08/06 Python
python 并发编程 非阻塞IO模型原理解析
2019/08/20 Python
Python新手学习raise用法
2020/06/03 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
2020/06/22 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
2020/10/15 Python
CSS3使用transition实现的鼠标悬停淡入淡出
2015/01/09 HTML / CSS
中国旅游网站:同程旅游
2016/09/11 全球购物
入党积极分子学习优秀共产党员先进事迹思想汇报
2014/09/13 职场文书
党的群众路线领导班子整改方案
2014/09/27 职场文书
五一放假通知怎么写
2015/08/18 职场文书