使用express.js保存文件的内容而不保存文件?

时间:2018-06-07 08:29:33

标签: node.js express fs multer

我正在编写一个我上传CVS文件的应用程序。我有一个CVS解析器,所以从我的前端我可以将CSV上传到后端,处理它并将其保存到数据库。之后我将删除该文件。

我正在使用multer接受该文件并将其保存到硬盘驱动器,然后我可以读取该文件并使用该文件的内容并删除该文件。一切都很好,一切都很好。

我试图弄清楚是否有办法跳过实际上完全保存文件。有没有一种简单的方法可以只从'multipart/form-data'表单提交文件并直接用快递阅读内容而无需将其保存在文件系统中?

仅供参考,这是我现在所拥有的,并且按预期工作

在前端:

static fileUpload(file) {
  const url = '/api/statement-upload';
  const formData = new FormData();
  formData.append('file', file);
  const config = {
    headers: {
      'content-type': 'multipart/form-data'
    }
  };
  return post(url, formData, config);
}

在我的快递服务器上,我使用了multer并定义了这样的路线:

import multer from 'multer';

export default function (router) {
  const upload = multer({dest: 'uploads/'});

  router.use('/api/statement-upload', upload.single('file'), (req, res) => {
    cvsParser(req.file.path)
      .then(() => res.json({error: false}))
      .catch(e => res.json({error: e}));
  });

  return router;
};

在我的cvsParser中,我有这个:

export default function (filePath) {
  let content = fs.readFileSync(filePath, 'binary');  
  fs.unlink(filePath, () => {});

  // do nasty stuff to content and save it gently in the database
}

所以简而言之,有没有办法在我可以使用文件内容之前不必将CSV保存到文件系统?

考虑到文件编码等,这是否可能,或许没有办法使用fs

2 个答案:

答案 0 :(得分:1)

当您不想将csv存储在文件系统中并读取内容时,可以执行此操作。就我而言,我必须将csv文件的内容作为字符串传递给另一台服务器(而不保存在服务器的本地系统中)。

main()

const multer = require('multer'); const upload = multer({ storage: multer.memoryStorage() }) app.post( '/users/bulkUpload', upload.single('csvFile'), this.usersRoutes.uploadUserData ); 中的

uploadUserData()

在这里,uploadUserData = async( req: Request, res: Response, next: any ): Promise<any> => { try { const options = { formData : { 'upload': String(req.file.buffer) }, headers: { authorization: req.token, 'Content-type': 'multipart/form-data' }, json: true }; const response = await this.http.post.exec( '/somePostUrl/', options ); return res.status(200).json(response.body); }catch (error) { return next(error); } } 将以字符串形式显示csv文件的内容。

希望对您有帮助。

答案 1 :(得分:0)

使用multer库,您可以存储上传到内存中的文件ad,将其用作缓冲区。在项目的自述文件中,您可以找到文档:github.com/expressjs/multer#memorystorage