react + koa2實現文件上傳並把文件內容批量插入mysql數據庫

首先react中使用antd的upload組件
  //上傳文件設置
      let _this = this
      const uploadprops = {
         name: 'file',
         action: '請求路徑',
         headers: {
            authorization: 'authorization-text',
         },
         onChange(info) {//獲取返回結果
            if (info.file.status !== 'uploading') {
               console.log(info.file, info.fileList);
            }
            if (info.file.status === 'done') {
               let response = info.file.response
               if (!response.success) {
                  message.error(response.message || `${info.file.name} 導入失敗。`)
                  info.file.name = ''
                  return
               }
               message.success(`${info.file.name} 導入成功。` || '');
               _this.search() //獲取列表
            } else if (info.file.status === 'error') {
               message.error(`${info.file.name} 上傳失敗。`);
            }
         }
      };
koa2中代碼
  1. 首先在app.js中引入 引入前先npm i …在這裏插入圖片描述
  2. 上圖高亮區域就是 注意最好按照這個順序
路由中如下代碼
router.post('/api/drxsl', async (ctx, next) => {
  //上傳單個文件
  const file = ctx.request.files.file; // 獲取上傳文件
	const reader = fs.createReadStream(file.path);	// 創建可讀流 此處需引入 fs模塊
	const ext = file.name.split('.').pop();		// 獲取上傳文件擴展名
	const upStream = fs.createWriteStream(`./public/upload/SCWJ.${ext}`);		// 創建可寫流
  reader.pipe(upStream).on('close', async ()=>{
    let excelFilePath = './public/upload/SCWJ.xlsx';
    // 讀取excel中所有工作表的數據
    let list = nodeXlsx.parse(excelFilePath); //此處需要下載中間件const nodeXlsx = require('node-xlsx')
    // 獲取excel中第一個工作表的數據
    let data = list[0].data;
    let result = [];
    // 字段過濾
    _.forEach(data.slice(1), (d) => { //此處需下載lodash
        result.push(['10114400010000000195', d[0]?'00'+d[0]:'',d[1]?d[1]:'',  d[2]?d[2]:'',  d[3]?d[3]:'', d[4]?d[4]:'', d[5]?d[5]:'',d[6]?d[6]:'',d[7]?d[7]:'0.03',d[8]?d[8]:'' ]);
    });
    let addkpxmvalues = result
    let addkpxmxxjg = await userService.setkpxmxx([addkpxmvalues]) //此處就是向mysql中插入多條內容
    var filePath = './public/upload/SCWJ.xlsx'; 
    fs.unlinkSync(filePath); //讀取完文件 並插入到數據庫中後刪除文件
  })
  ctx.body = {
    code: 200,
    message: '上傳成功',
    success:true
  }
});
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章