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

时间:2019-06-27 14:33:40

标签: javascript node.js express multer

我遇到一个问题,当使用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存储桶,如果这有区别的话。

1 个答案:

答案 0 :(得分:1)

哇,我只想说。

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);
});