fs.readFileSync 在 multer 上传文件之前发生,ENOENT 错误

fs.readFileSync happening before multer uploaded files, ENOENT error

我正在开发一个平台,用户应该能够通过 HTML 表单创建酒店。在表单中,有一个选项可以上传多个图像文件。

我正在使用 multer 来处理上传。我的程序如下:

创建目录'images'

  1. 将上传的图片保存在 'images' 目录中
  2. 将 'images' 目录中的图像转换为 base64
  3. 在数组中保存 base64 格式
  4. 在酒店 MongoDB 架构中保存数组
  5. 删除目录'images'

上传和保存工作正常,但当我尝试上传下一家酒店时出现错误:

Error: ENOENT: no such file or directory, open 'C:\ ...'

图像已成功存储在 'images' 目录中,但很明显,由于应用程序崩溃,文件没有任何处理,所以我必须手动删除它们。

因为这只在第二次尝试时发生(当重新启动应用程序时,它再次工作)我假设 fs.readFileSync 在图像上传完成之前执行。我很无能,因为 multer 是我的路由器链的一部分,转换为 base64 应该在所有文件上传到服务器之后发生。

我做错了什么?

多功能:https://i.stack.imgur.com/Wz167.png Base64 转换:https://i.stack.imgur.com/oOEmR.png 删除函数(保存到DB后执行)https://i.stack.imgur.com/PlTvH.png

这是一个简单的代码片段,用于将图像获取为 base64。 没有将它们存储到磁盘中。

const express = require('express');
const multer  = require('multer');
const storage = multer.memoryStorage();
const upload = multer({ storage });

const app = express();

app.post('/submit', upload.array('images'), (req, res, next) => {
  // req.files is array of `images` files
  // I believe it is a `Buffer` object.
  const base64Images = req.files.map(image => buffer.toString('base64'));
  // Ready to save into DB;
  console.log(base64Images);
})