详解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 相关文章推荐
用JavaScript和注册表脚本实现右键收藏Web页选中文本
Jan 28 Javascript
在第一个input框内输入内容.textarea自动得到第一个文件框的值的javascript代码
Apr 20 Javascript
33个优秀的jQuery 教程分享(幻灯片、动画菜单)
Jul 08 Javascript
利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
Jan 29 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
Dec 24 Javascript
基于JavaScript实现轮播图代码
Jul 14 Javascript
jQuery 操作input中radio的技巧
Jul 18 Javascript
JavaScript模仿Pinterest实现图片预加载功能
Oct 25 Javascript
微信小程序  action-sheet详解及实例代码
Nov 09 Javascript
Bootstrap下拉菜单Dropdowns的实现代码
Mar 17 Javascript
JavaScript闭包_动力节点Java学院整理
Jun 27 Javascript
在vue中实现嵌套页面(iframe)
Jul 30 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
ajax+php打造进度条代码[readyState各状态说明]
2010/04/12 PHP
php截取后台登陆密码的代码
2012/05/05 PHP
谈谈关于php的优点与缺点
2013/04/11 PHP
PHP使用header()输出图片缓存实例
2014/12/09 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
2010/08/27 Javascript
深入理解jQuery中live与bind方法的区别
2013/12/18 Javascript
浅谈Javascript数组(推荐)
2016/05/17 Javascript
react-native使用react-navigation进行页面跳转导航的示例
2017/09/07 Javascript
基于vue实现分页效果
2017/11/06 Javascript
VUE element-ui 写个复用Table组件的示例代码
2017/11/18 Javascript
详解vue添加删除元素的方法
2018/06/30 Javascript
详解vue中组件参数
2018/07/09 Javascript
react 国际化的实现代码示例
2018/09/14 Javascript
IE9 elementUI文件上传的问题解决
2018/10/17 Javascript
微信端调取相册和摄像头功能,实现图片上传,并上传到服务器
2019/05/16 Javascript
使用vue-router切换页面时实现设置过渡动画
2019/10/31 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
2020/09/07 Javascript
Element-ui upload上传文件限制的解决方法
2021/01/22 Javascript
[00:36]DOTA2上海特级锦标赛 LGD战队宣传片
2016/03/04 DOTA
说一说Python logging
2016/04/15 Python
django表单实现下拉框的示例讲解
2018/05/29 Python
在python image 中安装中文字体的实现方法
2019/08/22 Python
使用Python将图片转正方形的两种方法实例代码详解
2020/04/29 Python
美国顶级户外凉鞋品牌:Chacos
2017/03/27 全球购物
Lookfantastic西班牙官网:英国知名美妆购物网站
2018/06/13 全球购物
扩大国家免疫规划实施方案
2014/03/21 职场文书
《苏珊的帽子》教学反思
2014/04/07 职场文书
2014年母亲节演讲稿范文
2014/05/07 职场文书
汽车专业求职信
2014/06/05 职场文书
运动会演讲稿200字
2014/08/25 职场文书
第二批党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
青年教师个人总结
2015/02/11 职场文书
2015年办公室主任工作总结
2015/04/09 职场文书
辩论会主持词
2015/07/03 职场文书
2016年圣诞节寄语(一句话)
2015/12/07 职场文书