详解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中暂停功能的实现代码
Mar 04 Javascript
javascript 弹出层组件(升级版)
May 12 Javascript
JS 控制小数位数的实现代码
Aug 02 Javascript
仅IE支持clearAttributes/mergeAttributes方法使用介绍
May 04 Javascript
JQuery球队选择实例
May 18 Javascript
javascript实现倒计时并弹窗提示特效
Jun 05 Javascript
理解JavaScript的变量的入门教程
Jul 07 Javascript
利用jQuery实现WordPress中@的ID悬浮显示评论内容
Dec 11 Javascript
jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法
Mar 03 Javascript
vue.js实例todoList项目
Jul 07 Javascript
LayUI switch 开关监听 获取属性值、更改状态的方法
Sep 21 Javascript
vue实现把接口单独存放在一个文件方式
Aug 13 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中拷贝构造函数、赋值运算符重载
2012/07/25 PHP
php中http与https跨域共享session的解决方法
2014/12/20 PHP
PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】
2016/10/14 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
2019/12/12 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
总结一些js自定义的函数
2006/08/05 Javascript
使用Javascript接收get传递的值的代码
2011/11/30 Javascript
JavaScript初学者应注意的七个细节小结
2012/01/30 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
2013/07/31 Javascript
jquery动态增加删除表格行的小例子
2013/11/14 Javascript
js中一个函数获取另一个函数返回值问题探讨
2013/11/21 Javascript
jQuery中delegate和on的用法与区别详细解析
2014/01/26 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
2014/11/04 Javascript
jQuery采用连缀写法实现的折叠菜单效果
2015/09/18 Javascript
nodejs利用ajax实现网页无刷新上传图片实例代码
2017/06/06 NodeJs
JavaScript实现简单图片轮播效果
2017/08/21 Javascript
关于Ajax的原理以及代码封装详解
2017/09/08 Javascript
使用vue实现grid-layout功能实例代码
2018/01/05 Javascript
webpack 3.X学习之多页面打包的方法
2018/09/04 Javascript
webpack4 入门最简单的例子介绍
2018/09/05 Javascript
vue调用语音播放的方法
2019/09/27 Javascript
vue+canvas实现移动端手写签名
2020/05/21 Javascript
详解JavaScript原型与原型链
2020/11/16 Javascript
JavaScript实现alert弹框效果
2020/11/19 Javascript
Python对小数进行除法运算的正确方法示例
2014/08/25 Python
跟老齐学Python之私有函数和专有方法
2014/10/24 Python
Python编程实现正则删除命令功能
2017/08/30 Python
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
Python面向对象之私有属性和私有方法应用案例分析
2019/12/31 Python
HTML5添加鼠标悬浮音响效果不使用FLASH
2014/04/23 HTML / CSS
美国知名的百货清仓店:Neiman Marcus Last Call
2016/08/03 全球购物
求职信怎么写
2014/05/23 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers
Python 高级库15 个让新手爱不释手(推荐)
2021/05/15 Python
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python
Pandas自定义选项option设置
2021/07/25 Python