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插件分享
May 22 Javascript
js冒泡法和数组转换成字符串示例代码
Aug 14 Javascript
优化Node.js Web应用运行速度的10个技巧
Sep 03 Javascript
Javascript访问器属性实例分析
Dec 30 Javascript
javascript跨域总结之window.name实现的跨域数据传输
Nov 01 Javascript
jQuery on()绑定动态元素出现的问题小结
Feb 19 Javascript
解读Bootstrap v4 sass设计
May 29 Javascript
Vue实现点击显示不同图片的效果
Aug 10 Javascript
解决layui轮播图有数据不显示的情况
Sep 16 Javascript
vue项目中常见问题及解决方案(推荐)
Oct 21 Javascript
jQuery HTML css()方法与css类实例详解
May 20 jQuery
Vue 修改网站图标的方法
Dec 31 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
世界收音机发展史
2021/03/01 无线电
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
php存储过程调用实例代码
2013/02/03 PHP
用 Composer构建自己的 PHP 框架之基础准备
2014/10/30 PHP
支持中文的PHP按字符串长度分割成数组代码
2015/05/17 PHP
Zend Framework框架路由机制代码分析
2016/03/22 PHP
解决微信授权回调页面域名只能设置一个的问题
2016/12/11 PHP
基于jQuery的输入框无值自动显示指定数据的实现代码
2011/01/24 Javascript
点击弹出层效果&amp;弹出窗口后网页背景变暗效果的实现代码
2014/02/10 Javascript
js函数定时器实现定时读取系统实时连接数
2014/04/30 Javascript
jQuery多个input求和的实现方法
2015/02/12 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
2015/05/11 Javascript
javascript数组遍历的方法实例分析
2016/09/13 Javascript
javascript简单写的判断电话号码实例
2017/05/24 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
JavaScript array常用方法代码实例详解
2020/09/02 Javascript
[20:46]Ti4循环赛第三日VG vs DK
2014/07/12 DOTA
详谈python3中用for循环删除列表中元素的坑
2018/04/19 Python
使用Anaconda3建立虚拟独立的python2.7环境方法
2018/06/11 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
python统计指定目录内文件的代码行数
2019/09/19 Python
python flask搭建web应用教程
2019/11/19 Python
python做接口测试的必要性
2019/11/20 Python
Python的几种主动结束程序方式
2019/11/22 Python
使用python 对验证码图片进行降噪处理
2019/12/18 Python
Python监控服务器实用工具psutil使用解析
2019/12/19 Python
python识别验证码图片实例详解
2020/02/17 Python
python plt可视化——打印特殊符号和制作图例代码
2020/04/17 Python
HTML5的download属性详细介绍和使用实例
2014/04/23 HTML / CSS
英国领先的杂志订阅网站:Magazine.co.uk
2018/01/25 全球购物
Craghoppers德国官网:户外和旅行服装
2020/02/14 全球购物
Ajax和javascript的区别
2013/07/20 面试题
2014自荐信的写作技巧
2014/01/28 职场文书
2014学习全国两会精神心得体会2000字
2014/03/11 职场文书
报纸媒体创意广告词
2014/03/17 职场文书
Python中request的基本使用解决乱码问题
2022/04/12 Python