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 相关文章推荐
Display SQL Server Login Mode
Jun 21 Javascript
multiSteps 基于Jquery的多步骤滑动切换插件
Jul 22 Javascript
Android中资源文件(非代码部分)的使用概览
Dec 18 Javascript
解读JavaScript中 For, While与递归的用法
May 07 Javascript
JavaScript 对任意元素,自定义右键菜单的实现方法
May 08 Javascript
js使浏览器窗口最大化实现代码(适用于IE)
Aug 07 Javascript
JavaScript中的Array 对象(数组对象)
Jun 02 Javascript
jQuery实现的弹幕效果完整实例
Sep 06 jQuery
axios全局注册,设置token,以及全局设置url请求网段的方法
Sep 25 Javascript
深入理解react-router 路由的实现原理
Sep 26 Javascript
layui中的switch开关实现方法
Sep 03 Javascript
React + Threejs + Swiper 实现全景图效果的完整代码
Jun 28 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数组是否为空的代码
2011/09/08 PHP
解析dedecms空间迁移步骤详解
2013/05/15 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
2016/12/07 PHP
PHP串行化与反串行化实例分析
2016/12/27 PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
2017/01/19 PHP
ExtJS 学习专题(一) 如何应用ExtJS(附实例)
2010/03/11 Javascript
基于jquery的文章中所有图片width大小批量设置方法
2013/08/01 Javascript
Javascript之this关键字深入解析
2013/11/12 Javascript
JavaScript两种跨域技术全面介绍
2014/04/16 Javascript
Bootstrap~多级导航(级联导航)的实现效果【附代码】
2016/03/08 Javascript
ajax分页效果(bootstrap模态框)
2017/01/23 Javascript
iOS + node.js使用Socket.IO框架进行实时通信示例
2017/04/14 Javascript
解决在Bootstrap模糊框中使用WebUploader的问题
2018/03/22 Javascript
spirngmvc js传递复杂json参数到controller的实例
2018/03/29 Javascript
微信小程序调用摄像头隐藏式拍照功能
2018/08/22 Javascript
vue添加axios,并且指定baseurl的方法
2018/09/19 Javascript
node.js环境搭建图文详解
2018/09/19 Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
2020/03/06 Javascript
antd vue table跨行合并单元格,并且自定义内容实例
2020/10/28 Javascript
python找出完数的方法
2018/11/12 Python
在python3中使用shuffle函数要注意的地方
2020/02/28 Python
Selenium常见异常解析及解决方案示范
2020/04/10 Python
Python中使用filter过滤列表的一个小技巧分享
2020/05/02 Python
基于Python的接口自动化读写excel文件的方法
2021/01/15 Python
发现两个有趣的CSS3动画效果
2013/08/14 HTML / CSS
利用CSS3的3D效果制作正方体
2020/03/10 HTML / CSS
Boden英国官网:英国知名原创时装品牌
2018/11/06 全球购物
幼儿园教育教学反思
2014/01/31 职场文书
合作投资意向书
2014/04/01 职场文书
《大自然的语言》教学反思
2014/04/08 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
2015年小学教导处工作总结
2015/05/26 职场文书
电影复兴之路观后感
2015/06/02 职场文书
MySQL 使用SQL语句修改表名的实现
2021/04/07 MySQL
Django利用AJAX技术实现博文实时搜索
2021/05/06 Python
Redis 常见使用场景
2021/08/30 Redis