multer "req.file" 未定义来自脚本的 http 请求,但使用 html 表单标签

multer "req.file" is undefined for http request from script but working with html form tag

我在 Node.js 上使用 multer 构建了一个简单的文件上传器。当我上传带有 html 表单标签的文件时,它工作正常:

<form id="uploadForm" enctype="multipart/form-data" method="post">
    <input type="file" name="userFile" />
    <input type="submit" value="Upload File" name="submit">
</form>

但是如果我尝试使用 Angular JS $http 请求从 javaScript 执行相同的操作,它会抛出一条错误消息 "req.file is undefined"。使用邮递员上传时会抛出相同的错误。

我的 angular $http 请求:

var formData = new FormData();
    formData.append('file', file);

    $http.post('http://localhost:8080/api/file', formData, {
        headers: {'Content-Type': 'multipart/form-data'}
    })
    .then(function(res){
        console.log(res);
    })
    .catch(function(err){
        console.log(err);
    });

我的上传 api :

app.post('/api/file', function(req, res) {
var upload = multer({
    storage: multer.memoryStorage()
}).single('userFile')
upload(req, res, function(err) {
    console.log(req);
    if(req.file) {
        var buffer = req.file.buffer;
        var filename = req.file.originalname;
        fs.writeFile('./uploads/' + filename, buffer, 'binary', function(err) {
            if (err) throw err
            res.end('File is uploaded')
        })
    } else {
        res.end('Invalid request : file not found')
    }
});
})

有很多类似的问题,但 none 帮助我解决了这个问题。 任何人都可以让我知道这里的问题吗?谢谢。

userFile更改为file

var upload = multer({
    storage: multer.memoryStorage()
}).single('file')