一、獲取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");