Element-UI中Upload上传文件前端缓存处理示例


Posted in Javascript onFebruary 21, 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)
    }
   }

为方便测试,以下是完整代码:

<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>

PS: 相关阅读

https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Grid得到选择行数据的方法总结
Jan 17 Javascript
到处都是jQuery选择器的年代 不了解它们的性能,行吗
Jun 18 Javascript
javascript获取选中的文本的方法代码
Oct 30 Javascript
解析JSON对象与字符串之间的相互转换
Dec 18 Javascript
JavaScript函数的4种调用方法详解
Apr 22 Javascript
javascript检查浏览器是否已经启用XX功能
Jul 10 Javascript
JS实现超简单的仿QQ折叠菜单效果
Sep 21 Javascript
jqTransform美化表单
Oct 10 Javascript
JavaScript实现cookie的写入、读取、删除功能
Nov 05 Javascript
Jquery AJAX POST与GET之间的区别详细介绍
Oct 17 Javascript
jquery实现限制textarea输入字数的方法
Sep 06 jQuery
如何解决日期函数new Date()浏览器兼容性问题
Sep 11 Javascript
详解Puppeteer前端自动化测试实践
Feb 21 #Javascript
javascript中join方法实例讲解
Feb 21 #Javascript
React 组件渲染和更新的实现代码示例
Feb 21 #Javascript
vue图片上传本地预览组件使用详解
Feb 20 #Javascript
Vue 后台管理类项目兼容IE9+的方法示例
Feb 20 #Javascript
浅谈小程序 setData学问多
Feb 20 #Javascript
9102年webpack4搭建vue项目的方法步骤
Feb 20 #Javascript
You might like
简单解析PHP程序的运行流程
2016/06/23 PHP
PHP生成推广海报的方法分享
2018/04/22 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
2018/10/14 PHP
JavaScript 模拟用户单击事件
2009/12/31 Javascript
jquery判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
2010/10/15 Javascript
js检测输入内容全为空格的方法
2014/05/03 Javascript
在Node.js中实现文件复制的方法和实例
2014/06/05 Javascript
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
js实现div在页面拖动效果
2016/05/04 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
jquery 判断div show的状态实例
2016/12/03 Javascript
利用jQuery实现一个简单的表格上下翻页效果
2017/03/14 Javascript
微信小程序 中wx.chooseAddress(OBJECT)实例详解
2017/03/31 Javascript
详解vue-cli快速构建vue应用并实现webpack打包
2017/12/13 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
JavaScript继承定义与用法实践分析
2018/05/28 Javascript
jQuery实现基本淡入淡出效果的方法详解
2018/09/05 jQuery
浅谈针对Vue相同路由不同参数的刷新问题
2018/09/29 Javascript
在Vant的基础上封装下拉日期控件的代码示例
2018/12/05 Javascript
Angular6 发送手机验证码按钮倒计时效果实现方法
2019/01/08 Javascript
Node.js 实现抢票小工具 &amp; 短信通知提醒功能
2019/10/22 Javascript
vue使用transition组件动画效果的实例代码
2021/01/28 Vue.js
[48:47]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[01:31:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第二场 1月10日
2021/03/11 DOTA
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
Python删除Java源文件中全部注释的实现方法
2017/08/30 Python
Python优秀开源项目Rich源码解析的流程分析
2020/07/06 Python
如何验证python安装成功
2020/07/06 Python
Python 里最强的地图绘制神器
2021/03/01 Python
会计助理的岗位职责
2013/11/29 职场文书
顶撞领导检讨书
2014/01/29 职场文书
十佳美德少年事迹材料
2014/02/05 职场文书
博士生专家推荐信
2014/09/26 职场文书
缓刑人员思想汇报
2014/10/11 职场文书
单位租房协议书样本
2014/10/30 职场文书
pytorch 如何使用batch训练lstm网络
2021/05/28 Python