Element-UI中Upload上传文件前端缓存处置惩罚

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…

作者:java_augur
泉源:CSDN
原文:https://blog.csdn.net/java_au…
版权声明:本文为博主原创文章,转载请附上博文链接!

    原文作者:_小生_
    原文地址: https://segmentfault.com/a/1190000018224949
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞