• nodejs获取formdata上传的文件及解析excel问题


    一、获取formdata上传的文件

      问题:使用 koa-bodyparser 可以解析post提交的问题,但是发现获取不到formdata上传的文件。

      后经查资料,改用 koa-body 解决:

    const koaBody = require('koa-body');
    
    app.use(koaBody({
      multipart: true,
      formidable: {
        maxFileSize: 200 * 1024 * 1024 // 设置上传文件大小最大限制,默认2M
      }
    }))
    

      然后就可以在 ctx.request.files 里面获取到上传的 文件信息了。ctx.request.files 为一个对象,里面包含一个 file 字段(为你前端上传定义的值),值为文件信息,主要是文件name和path,path为临时存储路径。

    二、解析xlsx文件信息

      主要使用模块 node-xlsx :npm i xlsx --save

    1、加载模块

      使用模块:fs--主要用于写入文件;node-xlsx主要用于转换xlsx数据和读取xlsx的文件数据;

    const fs = require('fs')
    const xlsx = require('node-xlsx');      // 读写xlsx的插件
    

      

    2、读取功能

      读取功能相对简单,直接使用模块的 prase(路径) 方法就能读取

    let list = xlsx.parse("./doc/hello.xlsx");
    

      

    返回结果,name:表名,data:二维数组。(由于Excel以表格的形式表示,因此表格的数据都是通过二维数组进行接收。)

      需要注意的是:data里的第一行数组为表头的信息

    [
      { name: 'firstSheet', data: [ [Array], [Array] ] },
      { name: 'secondSheet', data: [ [Array], [Array] ] }
    ]
    

      

    3、写入功能

      写入功能,对应的写入数据与上面读取功能的返回格式需要一致,以数组的形式,name:表名,data:二维数组(Excel每行每列的数据)

      如下面代码,生成一个Excel文件,分别两张表,表名分别是firstSheet,secondSheet

    let xlsxObj = [
        {
            name: 'firstSheet',
            data: [
                [1, 2, 3],
                [4, 5, 6]
            ],
        },
        {
            name: 'secondSheet',
            data: [
                [7, 8, 9],
                [10, 1, 12]
            ],
        }
    ]
    

      

    生成Excel文件:

      fs.writeFileSync(路径,Buffer数据)

      xlsx.build(xlsxObj) 会将数组转换为Buffer数据

      执行下面代码就会生成对应的Excel文件

    fs.writeFileSync('./doc/hello.xlsx', xlsx.build(xlsxObj), "binary");
    

      

  • 相关阅读:
    docker重启提示已存在一个容器的问题处理
    conda虚拟环境安装
    dell5460笔记本电脑ubuntu18.04系统音频驱动的安装和使用
    CentOS8的网络管理变化
    jupyter notebook 安装扩展nbextensions
    win10系统systeminfo命令的过滤用法
    《学习scrapy框架爬小说》的进一步完善
    记手机端 下拉加载新数据
    记 页面使用overflow-scroll在iOS上滑动卡顿的问题
    记 判断手机号运营商function
  • 原文地址:https://www.cnblogs.com/phoebeyue/p/13659177.html
Copyright © 2020-2023  润新知