Javascript 平均应用程序:Can';无法在后端接收图像,上载失败

Javascript 平均应用程序:Can';无法在后端接收图像,上载失败,javascript,node.js,angular,mean-stack,Javascript,Node.js,Angular,Mean Stack,因此,我正在尝试将图像上载到node.js服务器。在我的组件中,我选择了要上载的图像,将其发送到我的服务,然后将其发送到服务器。我做了一些console.log来检查是否收到了文件 我不确定我是需要req.body还是req.file,所以我两个都需要。req.body返回空对象,req.files返回未定义。有人知道我做错了什么吗?我认为这与请求选项有关 我想上传的文件是png文件 这就是控制台的外观(来自下面userService文件中的console.log的结果) 用户服务文件:我在这

因此,我正在尝试将图像上载到node.js服务器。在我的组件中,我选择了要上载的图像,将其发送到我的服务,然后将其发送到服务器。我做了一些console.log来检查是否收到了文件

我不确定我是需要req.body还是req.file,所以我两个都需要。req.body返回空对象,req.files返回未定义。有人知道我做错了什么吗?我认为这与请求选项有关

我想上传的文件是png文件

这就是控制台的外观(来自下面userService文件中的console.log的结果)

用户服务文件:我在这里制作了一些控制台日志,上面的控制台显示了结果。我想我需要在这里使用特殊选项来发出请求,但我不知道是哪些选项。

postFile(fileToUpload: File, userId) {
        console.log(fileToUpload);
        const formData: FormData = new FormData();
        formData.append('fileKey', fileToUpload, fileToUpload.name);
        console.log(formData);
        return this.http.post("http://localhost:3200/user/uploadProfilePicture/" + userId, formData, )
            .map(() => { return true; })
            .catch((e) => this.handleError(e));
    }
node.js后端:只需一些console.log来检查文件是否到达后端,而它没有到达后端

router.post('/uploadProfilePicture/:userId', function(req, res){
    console.log('entered');
    console.log(req.body);
    console.log(req.files);

    res.status(200).json({
        msg: "sup mognol"
    })
});
后端控制台的结果。日志

进入, {},
未定义

由于您将文件作为formData发送,因此需要使用节点中间件来处理多部分表单数据

或者两者都是好的选择

您可以像这样使用multer:

var multer  = require('multer')
var upload = multer({ dest: 'uploads/' })

app.post('/profile', upload.single('avatar'), function (req, res, next) {
  // req.file is the `avatar` file 
  // req.body will hold the text fields, if there were any 
})

哦,是的,我忘了。谢谢!再问一个问题。在上面的代码(upload.single('avatar')中,化身是什么意思。它是您发送的文件的名称。因此,您的
req.file
看起来像
req.files['avatar'][0]->file
。这个名称来自您在post请求中对它的称呼