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 相关文章推荐
页面调用单个swf文件,嵌套出多个方法。
Nov 21 Javascript
浅析用prototype定义自己的方法
Nov 14 Javascript
关于Iframe父页面与子页面之间的相互调用
Nov 22 Javascript
vue日期组件 支持vue1.0和2.0
Jan 09 Javascript
AngularJS执行流程详解
Feb 17 Javascript
Vue全家桶实践项目总结(推荐)
Nov 04 Javascript
JavaScript 隐性类型转换步骤浅析
Mar 15 Javascript
jQuery使用bind动态绑定事件无效的处理方法
Dec 11 jQuery
详解如何快速配置webpack多入口脚手架
Dec 28 Javascript
详解vue中移动端自适应方案
May 05 Javascript
vue页面引入three.js实现3d动画场景操作
Aug 10 Javascript
基于vuex实现购物车功能
Jan 10 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
一个简单的PHP&amp;MYSQL留言板源码
2020/07/19 PHP
PHP判断远程图片是否存在的几种方法
2014/05/04 PHP
再Docker中架设完整的WordPress站点全攻略
2015/07/29 PHP
ThinkPHP在Cli模式下使用模板引擎的方法
2015/09/25 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
PHP array_reduce()函数的应用解析
2018/10/28 PHP
PHP实现倒计时功能
2020/11/16 PHP
js控制表单操作的常用代码小结
2013/08/15 Javascript
js类定义函数时用prototype与不用的区别示例介绍
2014/06/10 Javascript
纯javascript移动优先的幻灯片效果
2015/11/02 Javascript
用window.onerror捕获并上报Js错误的方法
2016/01/27 Javascript
老司机带你解读jQuery插件开发流程
2016/05/16 Javascript
JS获取地址栏参数的两种方法(简单实用)
2016/06/14 Javascript
vue.js中$watch的用法示例
2016/10/04 Javascript
详解微信开发中snsapi_base和snsapi_userinfo及静默授权的实现
2017/03/11 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
Vue.js实现在下拉列表区域外点击即可关闭下拉列表的功能(自定义下拉列表)
2017/05/30 Javascript
angular 实现的输入框数字千分位及保留几位小数点功能示例
2018/06/19 Javascript
python 文件与目录操作
2008/12/24 Python
python字符类型的一些方法小结
2016/05/16 Python
python安装Scrapy图文教程
2017/08/14 Python
python实现图片文件批量重命名
2020/03/23 Python
python 寻找list中最大元素对应的索引方法
2018/06/28 Python
Python当中的array数组对象实例详解
2019/06/12 Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
2020/10/22 Python
Mio Skincare法国官网:身体紧致及孕期身体护理
2018/04/04 全球购物
印度排名第一的蛋糕、鲜花和礼品送货:Winni
2019/08/02 全球购物
违反工作纪律检讨书
2014/02/15 职场文书
农村结婚典礼司仪主持词
2014/03/14 职场文书
检讨书怎么写
2015/01/23 职场文书
中标通知书
2015/04/17 职场文书
通知的格式范文
2015/04/27 职场文书
风之谷观后感
2015/06/11 职场文书
迎新生欢迎词2015
2015/07/16 职场文书
幼儿园教师心得体会范文
2016/01/21 职场文书
win10怎么设置右下角图标不折叠?Win10设置右下角图标不折叠的方法
2022/07/15 数码科技