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 相关文章推荐
jquery 学习之二 属性(类)
Nov 25 Javascript
ie支持function.bind()方法实现代码
Dec 27 Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
Mar 13 Javascript
取得元素的左和上偏移量的方法
Sep 17 Javascript
JavaScript中number转换成string介绍
Dec 31 Javascript
微信中一些常用的js方法汇总
Mar 12 Javascript
Boostrap实现的登录界面实例代码
Oct 09 Javascript
值得分享的JavaScript实现图片轮播组件
Nov 21 Javascript
js拖动滑块和点击水波纹效果实例代码
Oct 16 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
Sep 23 Javascript
Swiper实现导航栏滚动效果
Oct 16 Javascript
vue3自定义dialog、modal组件的方法
Jan 04 Vue.js
详解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
星际争霸中的热键
2020/03/04 星际争霸
在PHP的图形函数中显示汉字
2006/10/09 PHP
支持png透明图片的php生成缩略图类分享
2015/02/08 PHP
php身份证号码检查类实例
2015/06/18 PHP
PHP实现的MD5结合RSA签名算法实例
2017/10/07 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
php正确输出json数据的实例讲解
2018/08/21 PHP
Swoole扩展的6种模式深入详解
2021/03/04 PHP
IE6 hack for js 集锦
2014/09/23 Javascript
Lab.js初次使用笔记
2015/02/28 Javascript
jQuery实现简单的图片查看器
2020/09/11 Javascript
Angular下H5上传图片的方法(可多张上传)
2017/01/09 Javascript
ionic3实战教程之随机布局瀑布流的实现方法
2017/12/28 Javascript
JS实现数组删除指定元素功能示例
2019/06/05 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
2019/06/26 Javascript
微信小程序 bindtap 传参的实例代码
2020/02/21 Javascript
[01:23:59]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 VP vs Secret
2018/04/03 DOTA
[39:07]LGD vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
[46:44]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第二场 3月7日
2021/03/11 DOTA
详解Python中的序列化与反序列化的使用
2015/06/30 Python
Django 路由控制的实现代码
2018/11/08 Python
Python应用领域和就业形势分析总结
2019/05/14 Python
Python的Tkinter点击按钮触发事件的例子
2019/07/19 Python
Django Rest framework权限的详细用法
2019/07/25 Python
python smtplib发送多个email联系人的实现
2020/10/09 Python
耐克亚太地区:Nike APAC
2019/12/07 全球购物
C#怎么让一个窗口居中显示?
2015/10/20 面试题
中文系师范生自荐信
2013/10/01 职场文书
教师的实习自我鉴定
2013/12/17 职场文书
城建学院毕业生自荐信
2014/01/31 职场文书
国际经济贸易专业自荐信
2014/06/13 职场文书
邮政营业员岗位职责
2015/04/14 职场文书
宇宙与人观后感
2015/06/05 职场文书
2019年怎样才能撰写出优秀的自荐信
2019/03/25 职场文书
MySQL中in和exists区别详解
2021/06/03 MySQL
怎么用Python识别手势数字
2021/06/07 Python