node.js - 验证文件而不是上传文件 - multer
问题描述
我想.xlsx
在上传之前运行一些自定义验证。我现在已经编写了基本验证,但我的上传不起作用。
const express = require('express');
const app = express();
const multer = require('multer');
const router = express.Router();
const uploadExcel = require('./excelMiddleware');
const multerS = multer();
const upload = multer({
dest:'excel',
fileFilter(res, file, cb){
if(!file.originalname.match(/\.(xls|xlsx)$/)){
return cb(new Error('Please upload a excel file'));
}
cb(undefined, true)
}
}).single('file');
router.post('/upload', multerS.single('file'), uploadExcel, upload, (req, res) => {
upload(req, res, function (err, data) {
if (err) throw err;
})
res.send('<h1>file uploaded</h1>')
})
router.get('*', (req, res) => {
res.send('<h1>Page not found</h1>')
})
app.use(router);
app.listen(8000, ()=> {
console.log('Server stared')
})
excelMiddleware.js
const XLSX = require('xlsx');
const { CONTACT } = require('./column.config');
const _ = require('lodash');
const uploadExcel = (req, res, next) => {
try{
const columnMapper = CONTACT;
const workbook = XLSX.read(req.file.buffer, {type:'buffer'});
const sheetName = workbook.SheetNames;
const excelJson = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName[0]]);
if(!excelJson.length) {
throw Error("Blank sheet");
}
const columnCheck = Object.keys(excelJson[0]);
const isColumnEqual = _.isEqual(columnMapper, columnCheck);
if(!isColumnEqual){
throw Error("Blank sheet");
}
next();
}
catch(e){
console.log(e)
return res.status(400).send({error:e.message});
}
}
module.exports = uploadExcel;
解决方案
推荐阅读
- python - 从 docker 上的 tensorflow_serving 请求时出现错误 400
- visual-studio - 跟踪私有 NuGet 包中代码依赖关系的最佳实践
- git - 使用 README 初始化你的 repo 是否意味着你不能从本地 repo 推送?
- android - 如何测试订阅“in_app_purchase”?
- php - 如何将字符串写入 ZipArchive 流
- vb.net - 使用 VB.Net 从阿拉伯语文本中删除空格和新行
- php - 如何在PHP中以时间间隔显示列表
- go - Helm sprig 模板管道和/或否定
- python - 如何更改VScode中变量的颜色?
- azure - AzCopy v10.5.1:从文件共享复制到 blob 容器时出错