Я хочу сохранить загруженный файл пользователем. Ранее я использовал multer
для этого, но я хочу запустить некоторую проверку, поэтому в этом случае мой multer
не работает. Здесь я хочу использовать fs.write
для сохранения выходных данных, если проходит проверка, но мои данные поступают в виде буфера, я не знаю, как его сохранить.
const express = require('express');
const app = express();
const multer = require('multer');
const fs = require('fs');
const router = express.Router();
const uploadExcel = require('./excelMiddleware');
const multerS = multer();
router.post('/upload', multer.single('file'), uploadExcel, (req, res) => {
fs.write('/path/to/file') // want to write here
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;