详解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插件制作 表单验证实现代码
Aug 17 Javascript
解决Jquery鼠标经过不停滑动的问题
Mar 03 Javascript
JavaScript创建一个object对象并操作对象属性的用法
Mar 23 Javascript
jquery ui dialog替代confirm实例分析
Jan 25 Javascript
动态创建按钮的JavaScript代码
Jan 29 Javascript
浅析jquery与checkbox的checked属性的问题
Apr 27 Javascript
domReady的实现案例
Nov 23 Javascript
JS对象的深度克隆方法示例
Mar 16 Javascript
jquery 手势密码插件
Mar 17 Javascript
微信小程序实现提交input信息到后台的方法示例
Jan 19 Javascript
javascrit中undefined和null的区别详解
Apr 07 Javascript
详解Vue中组件的缓存
Apr 20 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
WINDOWS 2000下使用ISAPI方式安装PHP
2006/09/05 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
2015/06/17 PHP
jQuery getJSON 处理json数据的代码
2010/07/26 Javascript
js二级地域选择的实现方法
2013/06/17 Javascript
jQuery实现灰蓝风格标准二级下拉菜单效果代码
2015/08/31 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
2015/12/25 Javascript
JavaScript实现使用Canvas绘制图形的基本教程
2016/10/27 Javascript
简单理解vue中实例属性vm.$els
2016/12/01 Javascript
Vue.js第二天学习笔记(vue-router)
2016/12/01 Javascript
js弹出窗口简单实现代码
2017/03/22 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
2017/04/13 jQuery
Require.js的基本用法详解
2017/07/03 Javascript
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
2018/08/25 Javascript
jQuery实现表格的增、删、改操作示例
2019/01/27 jQuery
微信小程序云开发如何实现数据库自动备份实现
2019/08/16 Javascript
layui输入框只允许输入中文且判断长度的例子
2019/09/18 Javascript
解决vue自定义指令导致的内存泄漏问题
2020/08/04 Javascript
JavaScript实现移动小精灵的案例代码
2020/12/12 Javascript
python实现k均值算法示例(k均值聚类算法)
2014/03/16 Python
浅谈pytorch池化maxpool2D注意事项
2020/02/18 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
Python3实现个位数字和十位数字对调, 其乘积不变
2020/05/03 Python
Python做图像处理及视频音频文件分离和合成功能
2020/11/24 Python
基于pycharm 项目和项目文件命名规则的介绍
2021/01/15 Python
CSS3的新特性介绍
2008/10/31 HTML / CSS
CSS3 :not()选择器实现最后一行li去除某种css样式
2016/10/19 HTML / CSS
万得城电器土耳其网站:欧洲第一大电子产品零售商
2016/10/07 全球购物
群众路线剖析材料
2014/02/02 职场文书
个人公开承诺书
2014/03/28 职场文书
幼儿园家长评语大全
2014/04/16 职场文书
环卫工人先进事迹材料
2014/06/02 职场文书
领导班子四风表现材料
2014/08/23 职场文书
通知书大全
2015/04/27 职场文书
2015年小学辅导员工作总结
2015/05/27 职场文书
九年级历史教学反思
2016/02/19 职场文书
MySQL创建表操作命令分享
2022/03/25 MySQL