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 相关文章推荐
javascript Split方法,indexOf方法、lastIndexOf 方法和substring 方法
Mar 21 Javascript
Mootools 1.2教程 类(一)
Sep 15 Javascript
jQuery 技巧小结
Apr 02 Javascript
第二篇Bootstrap起步
Jun 21 Javascript
js实现可键盘控制的简单抽奖程序
Jul 13 Javascript
Bootstrap Table使用方法详解
Aug 01 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
Nov 24 Javascript
jquery 手势密码插件
Mar 17 Javascript
bootstrap响应式表格实例详解
May 15 Javascript
JavaScript实现旋转轮播图
Aug 18 Javascript
vue配置请求本地json数据的方法
Apr 11 Javascript
vue-router实现编程式导航的代码实例
Jan 19 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
无线电波是什么?它是怎样传输的?
2021/03/01 无线电
使用PHP制作新闻系统的思路
2006/10/09 PHP
thinkphp学习笔记之多表查询
2014/07/28 PHP
微信开发之网页授权获取用户信息(二)
2016/01/08 PHP
yii2 resetful 授权验证详解
2017/05/18 PHP
php静态成员方法和静态的成员属性的使用方法
2017/10/26 PHP
php查询内存信息操作示例
2019/05/09 PHP
详解阿里云视频直播PHP-SDK接入教程
2020/07/09 PHP
jQuery中调用WebService方法小结
2011/03/28 Javascript
JavaScript中字符串分割函数split用法实例
2015/04/07 Javascript
jquery控制页面部分刷新的方法
2015/06/24 Javascript
JavaScript实现下拉菜单的显示和隐藏
2016/01/05 Javascript
用JavaScript和jQuery实现瀑布流
2017/03/19 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
js移动端事件基础及常用事件库详解
2017/08/15 Javascript
浅谈Vuejs Prop基本用法
2017/08/17 Javascript
vue实现nav导航栏的方法
2017/12/13 Javascript
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
2018/04/21 Javascript
security.js实现的RSA加密功能示例
2018/06/06 Javascript
基于vue实现一个禅道主页拖拽效果
2019/05/27 Javascript
Vue项目打包部署到apache服务器的方法步骤
2021/02/01 Vue.js
[03:05]DOTA2英雄基础教程 嗜血狂魔
2013/12/10 DOTA
python通过colorama模块在控制台输出彩色文字的方法
2015/03/19 Python
python Selenium爬取内容并存储至MySQL数据库的实现代码
2017/03/16 Python
Django数据库操作的实例(增删改查)
2017/09/04 Python
Python实现螺旋矩阵的填充算法示例
2017/12/28 Python
深入浅析Python传值与传址
2018/07/10 Python
pandas分区间,算频率的实例
2019/07/04 Python
django queryset 去重 .distinct()说明
2020/05/19 Python
python合并多个excel文件的示例
2020/09/23 Python
伦敦著名的运动鞋综合商店:Footpatrol
2019/03/25 全球购物
四年的个人工作自我评价
2013/12/10 职场文书
四川成都导游欢迎词
2014/01/18 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书
2019安全宣传标语大全
2019/08/14 职场文书
MySQL数据迁移相关总结
2021/04/29 MySQL