因此,我在NodeJS中使用Multer上传文件时遇到了问题.在我第一次try 之后,我的目的地文件夹中没有返回,也没有文件.我把身体记入日志(log)进行判断,结果返回[Object: null prototype] {}.req.file的回报是undefined.

我的路径文件:workflow.js

var express = require('express');
var router = express.Router();

const multer = require('multer')

var storage = multer.diskStorage({
  destination: function (request, file, callback) {
      callback(null, "./public/data/satelliteimage/");
  },
  filename: function (request, file, callback) {
      fileName=file.originalname;
      callback(null, file.originalname);
  }
});

const uploadDest = multer({storage:storage})


router.get('/', function (req, res, next) {
  res.render('workflow');
});


router.post("/uploadSatelliteimage", uploadDest.single("satellitenbildInput"), function (req, res, next) {
  console.log(req.file);
  console.log(req.body);

  res.render('workflow');
})


module.exports = router;

我的查看文件:workflow.pug

extends layout

block content
    br
    br
    .container
        .row.justify-content-md-center
            .col-md-3
            .col-md-6
                div#form_div_sat.active-form
                    form(action='/workflow/uploadSatelliteimage' method='post' enctype="multipart/form-data")
                        label.col-md-4.col-form-label.fw-bolder(for='satellitenbild') Satellitenbild
                        input#satellitenbildInput.form-control.form-control-lg(type='file' name="satellitenbild" accept="image/png")
                        button#btn_satellite.btn.btn-primary.mb-2 Weiter
                br
                br
                br
            .col-md-3
        .row.justify-content-md-center
            .col-md-1 
            .col-md-4 
                div#form_div_train
                    form
                        label.col-md-4.col-form-label.fw-bolder(for='trainModell') Trainiertes Modell
                        input#trainMod.form-control.form-control-lg(type='file' name="trainModell" accept=" " enctype="multipart/form-data" disabled=true)
                    button#btn_trainMod.btn.btn-secondary.mb-2.disabled Weiter
            .col-md-2 
                br
                br
                h3.text-center oder
            .col-md-4 
                div#form_div_untrain
                    form
                        label.col-md-4.col-form-label.fw-bolder(for='untrainModell') Nicht-trainiertes Modell
                        input#untrainMod.form-control.form-control-lg(type='file' name="untrainModell" accept=" " enctype="multipart/form-data" disabled=true)
                    button#btn_untrainMod.btn.btn-secondary.mb-2.disabled Weiter
                br
                div#form_div
                    form
                        input#testR.form-control(type='text' name="testR", disabled = '')
                        button.btn.btn-secondary.mb-2(type='submit').disabled AOA berechnen
            .col-md-1

block scripts 
  script(src="/javascripts/workflowJS.js" defer)

我用谷歌搜索了很多,发现了一些堆积如山的问题,但答案对我没有帮助. 我的猜测是,它与body-parser有关,但这只适用于文本,multer应该是正确的.还是按表单的顺序,正文还没填好?或者是完全不同的东西.

我希望在你的帮助下找到解决办法.谢谢!

推荐答案

上传文件字段的名称在前端和后端都必须相同,但此处不匹配:

服务器:服务器:

uploadDest.single("satellitenbildInput"),

正面和侧面:

name="satellitenbild" accept="image/png"

因此,它们需要匹配,而不是satellitenbildInputsatellitenbild:

服务器:服务器:

uploadDest.single("satellitenbildInput"),

正面和侧面:

name="satellitenbildInput" accept="image/png"

此外,您似乎上传了多个文件,但来自不同的字段:trainModelluntrainModell,因此您需要使用.fields方法,其中对于每个文件字段,您在数组中提供一个具有文件字段名的对象,并且文件将存储在req.files中,因此您的路径应该如下所示:

router.post("/uploadSatelliteimage", uploadDest.fields([{
    name: 'satellitenbildInput',
    maxCount: 1
}, {
    name: 'trainModell',
    maxCount: 1
}, {
    name: 'untrainModell',
    maxCount: 1
}]), function(req, res, next) {
    console.log(req.files);
    console.log(req.body);

    res.render('workflow');
})

Node.js相关问答推荐

如何使用jq将依赖项添加到package.json中

Express无法发布

从MongoDB获取Tree数据

请求正文未定义

"sh:/usr/local/bin/node:当它存在于文件目录中时未找到

未显示NPM版本

ForbidenError:使用Express.js的CSRF令牌无效

bcrypt.compare 每次都返回 false

MongoDB 根据使用聚合的条件从嵌套数组中删除对象

如何使用来自前一阶段的另一个数组的聚合mongoose 在数组中添加字段

自定义 Docker 容器 Github 操作无法在 /github/workspace 中找到 Node 脚本

Ansible 将以什么用户身份运行我的命令?

如果我使用像 express 这样的 node 服务器,是否需要 webpack-dev-server

使用 WebSockets 有服务器成本吗?

添加git信息到create-react-app

TypeError:winston.Logger 不是带有winston 和morgan 的构造函数

nodejs:Ajax 与 Socket.IO,优缺点

使用 Mongoose 进行多对多映射

未在 Windows 8.1 上构建的 node 包 - 缺少 Microsoft.Cpp.Default.props

在 Node.js 中获取终端的宽度