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 相关文章推荐
根据分辨率不同,调用不同的css文件
Jul 07 Javascript
在模板页面的js使用办法
Apr 01 Javascript
与jquery serializeArray()一起使用的函数,主要来方便提交表单
Jan 31 Javascript
js静态方法与实例方法分析
Jul 04 Javascript
全面兼容的javascript时间格式化函数(比较实用)
May 14 Javascript
jQuery 隐藏和显示 input 默认值示例
Jun 03 Javascript
JavaScript中的闭包(Closure)详细介绍
Dec 30 Javascript
js事件监听器用法实例详解
Jun 01 Javascript
JS获取一个未知DIV高度的方法
Aug 09 Javascript
JavaScript实战之带收放动画效果的导航菜单
Aug 16 Javascript
[原创]SyntaxHighlighter自动识别并加载脚本语言
Feb 07 Javascript
详解Vue中使用插槽(slot)、聚类插槽
Apr 12 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中\r \r\n \t的区别示例介绍
2014/02/08 PHP
php初始化对象和析构函数的简单实例
2014/03/11 PHP
四个常见html网页乱码问题及解决办法
2015/09/08 PHP
PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)
2016/09/11 PHP
PHP文件上传操作实例详解
2016/09/27 PHP
JQuery 学习笔记01 JQuery初接触
2010/05/06 Javascript
jquery ajax return没有返回值的解决方法
2011/10/20 Javascript
js获取height和width的方法说明
2013/01/06 Javascript
window.location不跳转的问题解决方法
2014/04/17 Javascript
jQuery Easyui datagrid连续发送两次请求问题
2016/12/13 Javascript
5种JavaScript脚本加载的方式
2017/01/16 Javascript
vue.js input框之间赋值方法
2018/08/24 Javascript
详解vue 项目白屏解决方案
2018/10/31 Javascript
webpack打包多页面的方法
2018/11/30 Javascript
vue中使用vue-print.js实现多页打印
2020/03/05 Javascript
基于PHP pthreads实现多线程代码实例
2020/06/24 Javascript
解决vue项目打包上服务器显示404错误,本地没出错的问题
2020/11/03 Javascript
nuxt.js写项目时增加错误提示页面操作
2020/11/05 Javascript
Python FTP操作类代码分享
2014/05/13 Python
Python使用CMD模块更优雅的运行脚本
2015/05/11 Python
Python3中的真除和Floor除法用法分析
2016/03/16 Python
python scp 批量同步文件的实现方法
2019/01/03 Python
Python中正则表达式的用法总结
2019/02/22 Python
Python弹出输入框并获取输入值的实例
2019/06/18 Python
Django后端分离 使用element-ui文件上传方式
2020/07/12 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
2021/01/08 Python
HTML5 Canvas自定义圆角矩形与虚线示例代码
2013/08/02 HTML / CSS
Expedia爱尔兰:酒店、机票、租车及廉价假期
2017/01/02 全球购物
日本卡普空电视游戏软件公司官方购物网站:e-CAPCOM
2018/07/17 全球购物
临床医学系毕业生推荐信
2013/11/09 职场文书
大学学习生活感言
2014/01/18 职场文书
学校安全管理责任书
2014/07/23 职场文书
电影雷锋观后感
2015/06/10 职场文书
结婚纪念日感言
2015/08/01 职场文书
python基础之while循环语句的使用
2021/04/20 Python
详解如何使用Node.js实现热重载页面
2021/05/06 Javascript