req.files 在 Express 应用中使用 multer 时为空

req.files is empty when using multer in express app

我正在尝试在快速应用程序中使用 multer 将不同类型的文件上传到服务器。但是每次服务器通过声明 TypeError: req.files is not iterable 进行响应时。我查了一下 req.files 是空的。

这是相同的代码:

var express = require('express');
var app = express();

var multer = require('multer');
var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'uploads/')
  },
  filename: function (req, file, cb) {
    cb(null, Date.now() + '-' + file.originalname)
  }
})

var upload = multer({ storage: storage }).array('userfiles', 10);

app.post('/upload', function (req, res) {
  upload(req, res, function (err) {
    if (err instanceof multer.MulterError) {
      // A Multer error occurred when uploading.
      return res.status(500).json(err);
    } else if (err) {
      // An unknown error occurred when uploading.
      return res.status(500).json(err);
    }

    let uploadedFiles = [];
    for (let item of req.files) {
      uploadedFiles.push({ filename: item.originalname });
    }

    // Everything went fine.
    res.json({ progress: 100, files: uploadedFiles });
  })
});

app.listen(8000, (err) => {
  if (err) {
    console.log('ERROR:', err);
  } else {
    console.log('working on http://localhost:8000');
  }
})

这就是我从邮递员那里调用 API 的方式: Postman UI

我无法弄清楚问题出在哪里。请帮我解决这个问题。

我 运行 他的代码,他试图将图像存储在我的文件系统的根目录下。

要引用相对于您当前目录的路径,您需要使用 ./

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'uploads/')  // change 'upload/' to './uṕload'
  },
  filename: function (req, file, cb) {
    cb(null, Date.now() + '-' + file.originalname)
  }
})

在此之后,代码有效。