百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

vue 上传文件预览

toyiye 2024-06-21 12:42 11 浏览 0 评论


需要用到xlsx 插件,指定0.16.9版本

npm install xlsx@0.16.9 --save

还需要一个日期的转换方法,已经封装好了Date.js 文件

// 把excel文件中的日期格式的内容转回成标准时间
function formatExcelDate(numb, format = '/') {
    const time = new Date((numb - 25567) * 24 * 3600000 - 5 * 60 * 1000 - 43 * 1000 - 24 * 3600000 - 8 * 3600000)
    time.setYear(time.getFullYear())
    const year = time.getFullYear() + ''
    const month = time.getMonth() + 1 + ''
    const date = time.getDate() + ''
    if (format && format.length === 1) {
        return year + format + month + format + date
    }
    return year + (month < 10 ? '0' + month : month) + (date < 10 ? '0' + date : date)
};
const  MyDate={
    formatExcelDate,
}

export default MyDate;

vue 页面

<el-button type="primary" @click="dialogvisible1=true">上传文件</el-button>
               <!--上传文件弹出框-->
                <el-dialog title="上传文件" :visible.sync="dialogvisible1" style="width:100%;" @close="OnClose1">
                      <el-upload
                            ref="upload"
                            :limit="1"
                            accept=".xls,.xlsx"
                            name="files"
                            multiple
                            :action="baseURL"
                            :on-change="handleFileChange1"
                            :before-remove="handleFileRemove"
                            :auto-upload="false"
                            :file-list="upload.fileList"
                            >
                  <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
                   <el-button style="margin-left: 10px;" size="small" type="success" @click="submitFileForm">上传到服务器</el-button>
                </el-upload>
                         <el-table style="width: auto" border :data="tableData" id="tableData">
                            <template v-for="(item,index) in tableHead">
                              <el-table-column :prop="item.column_name" :label="item.column_comment" :key="index"
                                               v-if="item.column_name !== 'id'"></el-table-column>
                            </template>
                         </el-table>
                </el-dialog>

js 实现,需要先引用封装的日期转换文件,xlsx

import aDate  from '../static/js/Dates'
import XLSX from 'xlsx'
export default {
    aDate,

  },
  data(){}
}

js实现的代码

handleFileChange1(file, fileList) {
      const types = file.name.split(".")[1];
      const fileType = ["xlsx", "xlc", "xlm", "xls", "xlt"].some(
          item => item === types
      );
      if (!fileType) {
        alert("格式错误!请重新选择");
        return;
      }
      this.file2Xce(file).then(tabJson => {
        if (tabJson && tabJson.length > 0) {
          const data = {};
          const this_ = this;
          const dataSheet=tabJson[0].sheet;
          for(var i=0;i<dataSheet.length;i++){
            dataSheet[i].出生日期=aDate.formatExcelDate(parseInt(dataSheet[i].出生日期,'/'));
            dataSheet[i].入学时间=aDate.formatExcelDate(parseInt(dataSheet[i].入学时间,'/'));
          }
          this_.card = JSON.stringify(dataSheet);
          data.card = this_.card;            //中英文转化
          this_.excelToTable(data);//调用生成table方法
        }
      });
      this.upload.fileList = fileList;
    },
    file2Xce(file) {
      return new Promise(function (resolve) {
        const reader = new FileReader();
        let rABS = typeof FileReader !== "undefined" && (FileReader.prototype||{}).readAsBinaryString;

        reader.onload = function (e) {
          const data = e.target.result;
          if (!rABS) {
            data = new Uint8Array(data)
          }
          this.wb = XLSX.read(data, {type: rABS ? 'binary' : 'array'});
          const result = [];
          this.wb.SheetNames.forEach(sheetName => {
            result.push({
              sheetName: sheetName,
              sheet: XLSX.utils.sheet_to_json(this.wb.Sheets[sheetName])
            });
          });
          resolve(result);
        };
        // reader.readAsBinaryString(file.raw);
        if (rABS) {
          reader.readAsBinaryString(file.raw)
        } else {
          reader.readAsArrayBuffer(file.raw)
        }
      });
    },
    // 把excel用转化为table
    excelToTable(data) {
      const outData = JSON.parse(data.card);
      // console.log("excel数据:  "+JSON.stringify(outData));
      const tableHeadList = [];
      let num = 1;
      for (const tableHead2 in outData[0]) {
        const tableHead1 = {};
        tableHead1['column_name'] = "column_name" + num;
        tableHead1['column_comment'] = tableHead2;
        num = num + 1;
        tableHeadList.push(tableHead1);
      }
      // console.log("表头数据:"+JSON.stringify(tableHeadList));
      this.tableHead = tableHeadList;//定制表头

      const tableDataList = [];
      for (let j = 0; j < outData.length; j++) {
        const tableData1 = {};
        for (let k = 0; k < tableHeadList.length; k++) {
          // console.log("表头字段:"+tableHeadList[k]['column_name']+",表头数据:" + tableHeadList[k]['column_comment']);
          for (const outDataKey in outData[j]) {
            if (outData[j].hasOwnProperty(outDataKey)) {//对于(可能迭代异常(自定义/继承)成员,可能缺少 hasOwnProperty 检查)的错误的解决,用if语句判断
              if (tableHeadList[k]['column_comment'] === outDataKey) {
                tableData1[tableHeadList[k]['column_name']] = outData[j][outDataKey];
              }
            }
          }
        }
        tableDataList.push(tableData1);
      }
      this.tableData = tableDataList;//给表格内容赋值
    },
    // 删除之前钩子
    handleFileRemove(file, fileList) {
      this.upload.fileList = fileList;
    },
    // 提交上传文件
    submitFileForm() {
      // 创建新的数据对象
      let formData = new FormData();
      // 将上传的文件放到数据对象中
      this.upload.fileList.forEach(file => {
        formData.append('file', file.raw);
        this.upload.fileName.push(file.name);
      });
      // 文件名
      formData.append('fileName', this.upload.fileName);
      // 自定义上传
      this.uploadFile(formData).then(res => {
        console.log(res);
        if(res.data>0){
          this.$refs.upload.clearFiles();
          this.$message.success('上传成功!');
          this.tableData=[];
          this.tableHead=[];
          this.upload.fileList=[];
          this.dialogvisible1=false;
        }else{
          this.$message.error(response.msg);
        }
      })
      // .catch(error => {
      //   this.$message.error('上传失败!');
      // });

    },
    // 封装的上传请求
    uploadFile(params) {
      this.baseURL='XXXX';//请求的接口
      this.myToken=window.localStorage.getItem('token');
      /*设置请求头*/
      return this.$axios.post('XXXX', params,
          { headers: { 'Content-Type': 'multipart/form-data', token: this.myToken}})
    },

不用谢我,可以直接拿来使用,别忘记点个赞。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码