详解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 相关文章推荐
遨游,飞飞,IE,空中网 浏览器无提示关闭方法
Jul 11 Javascript
javascripit实现密码强度检测代码分享
Dec 12 Javascript
基于jquery的simpleValidate简易验证插件
Jan 31 Javascript
无刷新预览所选择的图片示例代码
Apr 02 Javascript
js实现按一下删除键删除整个单词附demo
Sep 05 Javascript
jQuery form插件的使用之处理server返回的JSON, XML,HTML数据
Jan 26 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
Nov 30 Javascript
浅析BootStrap中Modal(模态框)使用心得
Dec 24 Javascript
详解webpack babel的配置
Jan 09 Javascript
js笔试题-接收get请求参数
Jun 15 Javascript
解决ant Design中Select设置initialValue时的大坑
Oct 29 Javascript
基于Cesium绘制抛物弧线
Nov 18 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
真正面向对象编程:PHP5.01发布
2006/10/09 PHP
PHP实现下载断点续传的方法
2014/11/12 PHP
PHP中创建图像并绘制文字的例子
2014/11/19 PHP
php实现网站顶踩功能的完整前端代码
2015/07/19 PHP
Yii框架用户登录session丢失问题解决方法
2017/01/07 PHP
jQuery 改变CSS样式基础代码
2010/02/11 Javascript
按钮JS复制文本框和表格的代码
2011/04/01 Javascript
给jqGrid数据行添加修改和删除操作链接(之一)
2011/11/04 Javascript
提高jQuery性能的十个诀窍
2013/11/14 Javascript
node.js中的console.dir方法使用说明
2014/12/10 Javascript
JQuery.get提交页面不跳转的解决方法
2015/01/13 Javascript
jQuery实现的淡入淡出二级菜单效果代码
2015/09/15 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
jQuery多选框选择数量限制方法
2017/02/08 Javascript
Vue中的数据监听和数据交互案例解析
2017/07/12 Javascript
vue-cli项目中怎么使用mock数据
2017/09/27 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
2017/11/12 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
2018/11/21 Javascript
jQuery实现点击旋转,再点击恢复初始状态动画效果示例
2018/12/11 jQuery
JS删除对象中某一属性案例详解
2020/09/08 Javascript
JavaScript实现简单日历效果
2020/09/11 Javascript
js中复选框的取值及赋值示例详解
2020/10/18 Javascript
[34:56]Ti4冒泡赛LGD vs Liquid 1
2014/07/14 DOTA
python简单实现操作Mysql数据库
2018/01/29 Python
用pandas按列合并两个文件的实例
2018/04/12 Python
html5指南-1.html5全局属性(html5 global attributes)深入理解
2013/01/07 HTML / CSS
什么是Smarty变量操作符?如何使用Smarty变量操作符
2014/07/18 面试题
联想C++笔试题
2012/06/13 面试题
华三通信H3C面试题
2015/05/15 面试题
初一体育教学反思
2014/01/29 职场文书
学校安全生产月活动总结
2014/07/05 职场文书
运动与健康自我评价
2015/03/09 职场文书
暂住证明怎么写
2015/06/19 职场文书
python 实现的截屏工具
2021/05/08 Python
修改MySQL的默认密码的四种小方法
2021/05/26 MySQL
Javascript设计模式之原型模式详细
2021/10/05 Javascript