как сохранить файлы загруженные через api в nodejs - PullRequest
1 голос
/ 02 апреля 2019

Я хочу сохранить загруженный файл пользователем. Ранее я использовал 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;

1 Ответ

0 голосов
/ 02 апреля 2019

Предполагается, что вы пишете в файл на сервере.Для этого вам нужно fs.writeFile() Документация: fs.writeFile ()

router.post('/upload', multer.single('file'), uploadExcel, (req, res) => {
    // req.file.file is the uploaded file in memory   
    fs.writeFile('/path/to/file', req.file.file.buffer, (err) => {
        if (err) {
            console.log('do something with err', err)
            // throw error maybe
        }
        // file was uploaded successfully
        res.send('<h1>file uploaded</h1>')
    })
})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...