详解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 要点归纳(一) jQuery选择器
Mar 21 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
May 15 Javascript
javascript学习笔记(八)正则表达式
Oct 08 Javascript
微信小程序 chooseImage选择图片或者拍照
Apr 07 Javascript
Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
May 10 Javascript
vue-cli webpack 引入swiper的操作方法
Sep 15 Javascript
小程序异步问题之多个网络请求依次执行并依次收集请求结果
May 05 Javascript
vuex 动态注册方法 registerModule的实现
Jul 03 Javascript
使用vue实现HTML页面生成图片的方法
Mar 12 Javascript
Vue项目配置跨域访问和代理proxy设置方式
Sep 08 Javascript
详解ES6中class的实现原理
Oct 03 Javascript
原生Javascript+HTML5一步步实现拖拽排序
Jun 12 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/01/10 PHP
php调用Google translate_tts api实现代码
2013/08/07 PHP
PHP图片库imagemagick安装方法
2014/09/23 PHP
php中switch与ifelse的效率区别及适用情况分析
2015/02/12 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
2015/12/17 PHP
php格式化时间戳
2016/12/17 PHP
PHP完全二叉树定义与实现方法示例
2017/10/09 PHP
js 获取浏览器高度和宽度值(多浏览器)
2009/09/02 Javascript
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
写出高效jquery代码的19条指南
2014/03/19 Javascript
JavaScript中使用typeof运算符需要注意的几个坑
2014/11/08 Javascript
上传文件返回的json数据会被提示下载问题解决方案
2014/12/03 Javascript
JavaScript调试工具汇总
2014/12/23 Javascript
解决JS请求服务器gbk文件乱码的问题
2015/10/16 Javascript
详解angularJs中关于ng-class的三种使用方式说明
2017/06/02 Javascript
nodejs socket服务端和客户端简单通信功能
2017/09/14 NodeJs
Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能
2018/01/26 Javascript
layui的数据表格+springmvc实现搜索功能的例子
2019/09/28 Javascript
在博客园博文中添加自定义右键菜单的方法详解
2020/02/05 Javascript
ES2020 已定稿,真实场景案例分析
2020/05/25 Javascript
javascript运行机制之执行顺序理解
2020/08/03 Javascript
[02:05]DOTA2完美大师赛趣味视频之看我表演
2017/11/18 DOTA
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
2014/06/09 Python
Python的时间模块datetime详解
2017/04/17 Python
django 连接数据库 sqlite的例子
2019/08/14 Python
python求加权平均值的实例(附纯python写法)
2019/08/22 Python
python、Matlab求定积分的实现
2019/11/20 Python
使用python实现哈希表、字典、集合操作
2019/12/22 Python
python 6.7 编写printTable()函数表格打印(完整代码)
2020/03/25 Python
使用canvas压缩图片上传的方法示例
2020/02/07 HTML / CSS
蒂芙尼澳大利亚官方网站:Tiffany&Co. Australia
2017/08/27 全球购物
美国山地自行车、露营、户外装备和服装购物网站:Aventuron
2018/05/05 全球购物
New Balance加拿大官方网站:运动鞋和健身服装
2018/11/19 全球购物
怎样写好自荐信和推荐信
2013/12/26 职场文书
院党委组织查摆问题对照检查材料思想汇报2014
2014/10/08 职场文书
JavaScript圣杯布局与双飞翼布局实现案例详解
2022/08/05 Javascript