multer.memoryStorage() 返回 req.file 未定义

multer.memoryStorage() is returning req.file as undefined

我遇到一个问题,当使用 multer.memoryStorage 时,它返回 req.file 未定义。我可以成功使用 multer.diskStorage 并将我的文件保存在后端目录中。所以我知道我的前端正在按预期发送 formData

这是我的客户端代码,负责发送 formData:

  filesUpload = () => {
    const data = new FormData();
    const { files } = this.state;
    const filesKey = Object.keys(files);

    filesKey.forEach(key => {
      data.append('file', files[key]);
    });

    const axiosConfig = {
      headers: { 'Content-Type': 'multipart/form-data' }
    };

    axios.post('/v1/upload/files', axiosConfig, data, {}).then(res => {
      console.log(res.statusText);
    });
  };

这是 Express 服务器端代码。调用 '/v1/upload/files' 时会触发此控制器:

//Multer Engine
const storage = multer.memoryStorage({
  destination: (req, file, callback) => {
    callback(null, '');
  }
});

const multipleUpload = multer({ storage: storage }).array('file');

exports.s3Upload = (req, res) => {
  multipleUpload(req, res, err => {
    if (err instanceof multer.MulterError) {
      console.log(err);
    }
    res.send(req.file) //req.file is always undefined
  });
};

我很困惑,因为正如我上面所说,multer.diskStorage 对我来说很好。我想我错过了使用 memoryStorage 的一大块。如果这在这里有所作为,我最终会将使用 multer 处理的文件发送到 AWS S3 存储桶。

哇,这就是我要说的。

const axiosConfig = {
   headers: { 'Content-Type': 'multipart/form-data' }
};

axios.post('/v1/upload/files', data, axiosConfig).then(res => {
  console.log(res.statusText);
});

我有一个空对象被传递到原始代码中的 Axios 参数......

axios.post('/v1/upload/files', axiosConfig, data, {EMPTY}).then(res => {
  console.log(res.statusText);
});