详解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 相关文章推荐
40款非常有用的 jQuery 插件推荐(系列一)
Dec 21 Javascript
web基于浏览器的本地存储方法应用
Nov 27 Javascript
javascript实例分享---具有立体效果的图片特效
Jun 08 Javascript
使用JavaScript+canvas实现图片裁剪
Jan 30 Javascript
javascript中的altKey 和 Event属性大全
Nov 06 Javascript
JS 终止执行的实现方法
Nov 24 Javascript
利用Jasmine对Angular进行单元测试的方法详解
Jun 12 Javascript
浅谈webpack打包之后的文件过大的解决方法
Mar 07 Javascript
Hexo已经看腻了,来手把手教你使用VuePress搭建个人博客
Apr 26 Javascript
vue超时计算的组件实例代码
Jul 09 Javascript
vue-cli点击实现全屏功能
Mar 07 Javascript
ajax jquery实现页面某一个div的刷新效果
Mar 04 jQuery
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
定制404错误页面,并发信给管理员的程序
2006/10/09 PHP
[原创]PHP中通过ADODB库实现调用Access数据库之修正版本
2006/12/31 PHP
php面向对象全攻略 (三)特殊的引用“$this”的使用
2009/09/30 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
2016/07/09 PHP
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
Javascript 静态页面实现随机显示广告的办法
2010/11/17 Javascript
Javascript实现真实字符串剩余字数提示的实例代码
2013/10/22 Javascript
实现无刷新联动例子汇总
2015/05/20 Javascript
jquery 中ajax执行的优先级
2015/06/22 Javascript
jQuery Timelinr实现垂直水平时间轴插件(附源码下载)
2016/02/16 Javascript
jquery自动补齐功能插件flexselect用法示例
2016/08/06 Javascript
nodejs微信公众号支付开发
2016/09/19 NodeJs
Json按某个键的值进行排序
2016/12/22 Javascript
JavaScript中动态向表格添加数据
2017/01/24 Javascript
详解Node.js串行化流程控制
2017/05/04 Javascript
js自定义Tab选项卡效果
2017/06/05 Javascript
JavaScript代码执行的先后顺序问题
2017/10/29 Javascript
vue 的keep-alive缓存功能的实现
2018/03/22 Javascript
angular6 利用 ngContentOutlet 实现组件位置交换(重排)
2018/11/02 Javascript
ionic4+angular7+cordova上传图片功能的实例代码
2019/06/19 Javascript
微信小程序图片左右摆动效果详解
2019/07/13 Javascript
vue中h5端打开app(判断是安卓还是苹果)
2021/02/26 Vue.js
python实现定时发送qq消息
2019/01/18 Python
Python告诉你木马程序的键盘记录原理
2019/02/02 Python
浅谈Python 钉钉报警必备知识系统讲解
2020/08/17 Python
python基于exchange函数发送邮件过程详解
2020/11/06 Python
CSS3的calc()做响应模式布局的实现方法
2017/09/06 HTML / CSS
美国最大的家庭鞋类零售商之一:Shoe Carnival
2017/10/06 全球购物
德国受欢迎的旅游和休闲网站:lastminute.de
2019/09/23 全球购物
企业办公室岗位职责
2014/03/12 职场文书
幼儿园中班教师寄语
2014/04/03 职场文书
节约用水倡议书
2014/04/16 职场文书
2015年营业员工作总结
2015/04/23 职场文书
社区安置帮教工作总结2015
2015/05/20 职场文书
创业计划书之餐饮馄饨店
2019/07/18 职场文书
通过shell脚本对mysql的增删改查及my.cnf的配置
2021/07/07 MySQL