详解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 相关文章推荐
jQuery Ajax提交表单查询获得数据实例代码
Sep 19 Javascript
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
Jan 23 Javascript
javascript图片预加载实例分析
Jul 16 Javascript
javascript字符串循环匹配实例分析
Jul 17 Javascript
JS实现浏览器状态栏显示时间的方法
Oct 27 Javascript
jQuery插件passwordStrength密码强度指标详解
Jun 24 Javascript
javascript与jquery动态创建html元素示例
Jul 25 Javascript
jQuery实现圣诞节礼物传送(花式轮播)
Dec 25 Javascript
JavaScript实现简单评论功能
Aug 17 Javascript
JavaScript数组去重的方法总结【12种方法,号称史上最全】
Feb 28 Javascript
vue指令v-html使用过滤器filters功能实例
Oct 25 Javascript
JS中锚点链接点击平滑滚动并自由调整到顶部位置
Feb 06 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+mysql+ajax轻量级聊天室实现方法详解
2016/10/17 PHP
Ubuntu上安装yaf扩展的方法
2018/01/29 PHP
基于jquery的滚动新闻列表
2010/06/19 Javascript
js 创建快捷方式的代码(fso)
2010/11/19 Javascript
20款非常优秀的 jQuery 工具提示插件 推荐
2012/07/15 Javascript
jQuery中对节点进行操作的相关介绍
2013/04/16 Javascript
jQuery弹出框代码封装DialogHelper
2015/01/30 Javascript
JS实现很酷的水波文字特效实例
2015/02/26 Javascript
JavaScript学习笔记之数组随机排序
2016/03/23 Javascript
第十章之巨幕页头缩略图与警告框组件
2016/04/25 Javascript
AngularJS模板加载用法详解
2016/11/04 Javascript
解决vue router使用 history 模式刷新后404问题
2017/07/19 Javascript
微信公众号H5之微信分享常见错误和问题(小结)
2019/11/14 Javascript
[52:09]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第二场
2014/05/26 DOTA
[46:21]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
Python群发邮件实例代码
2014/01/03 Python
Windows下用py2exe将Python程序打包成exe程序的教程
2015/04/08 Python
浅析Python中将单词首字母大写的capitalize()方法
2015/05/18 Python
Python对字符串实现去重操作的方法示例
2017/08/11 Python
Python编程实现使用线性回归预测数据
2017/12/07 Python
Python实现进程同步和通信的方法
2018/01/02 Python
Python爬取成语接龙类网站
2018/10/19 Python
在Python文件中指定Python解释器的方法
2019/02/18 Python
Python+OpenCV实现实时眼动追踪的示例代码
2019/11/11 Python
推荐WEB开发者最佳HTML5和CSS3代码生成器
2015/11/24 HTML / CSS
美国知名男士服饰品牌:Brooks Brothers(布克兄弟)
2016/08/25 全球购物
商务英语求职自荐信范文
2013/12/24 职场文书
供应链金融服务方案
2014/05/25 职场文书
北京奥运会口号
2014/06/21 职场文书
教师个人查摆剖析材料
2014/10/14 职场文书
2015年小学开学寄语
2015/02/27 职场文书
公司禁烟通知
2015/04/23 职场文书
2016年世界人口日宣传活动总结
2016/04/05 职场文书
html+css实现赛博朋克风格按钮
2021/05/26 HTML / CSS
Django使用echarts进行可视化展示的实践
2021/06/10 Python
Android自定义双向滑动控件
2022/04/19 Java/Android