为什么 属性 'sampleFile' 未定义

why the property 'sampleFile' is undefined

我正在尝试将文件上传到我的服务器并将它们存储在 "upload" 文件中。 我听了很多教程,但我得到了同样的错误 我正在使用 Body-Parser

这是我项目的架构:link

这是我的 /upload 路由 Nodejs 代码

const express = require('express');
const route = express.Router();
const multer  = require('multer');
//const upload = multer({ dest: 'upload/' });





var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, '../upload')
  },
  filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now()+".jpg")
  }
})

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





//route.use(upload());
route.get("/upload",(req,res,next)=>{
  res.render("siteshs/upload");
});

route.post('/upload', function (req, res,next) {
  upload(req, res, function (err) {
    if (err) {
      // An error occurred when uploading
      return
    }
    console.log(req.files.sampleFile);
    // Everything went fine
  })
})
module.exports = route

我的 PUG 代码

extends ../layout

block content
  form(method="post", action="/siteshs/upload")
    .form-group
      label  choisissez votre fichier excel
      input.form-control(type='file', name='sampleFile')
    .form-group
      input.form-control(type="submit", value="envoyer")

你的multer初始化

var storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, './')
    },
    filename: function (req, file, cb) {
        cb(null, file.originalname);
    }
});
var upload = multer({
    storage: storage
});

处理Post请求:

router.post('/todo',upload.any(),function(req,res){
    var path = req.files[0].path;
    var imageName = req.files[0].originalname;
    var imagepath = {};
    imagepath['path'] = path;
    imagepath['originalname'] = imageName;
    console.log(imagepath)
})

前端代码:

form.form-signin(action='/todo', method='post', enctype='multipart/form-data')

  textarea#tdesc.form-control(rows='5', name='tdesc')
  br
  input.form-control(type='file', name='path')
  br
  button.btn.btn-lg.btn-default.btn-block(type='submit') Add Task

在使用 multer 和文件上传时,您必须在 form 标签中输入 enctype='multipart/form-data'

您还必须初始化正确的位置来存储图像,并使该路径在您的 app.js 中保持静态,例如 app.use(express.static('./'));