为什么属性' sampleFile'未定义

时间:2018-03-16 12:01:01

标签: javascript node.js pug multer

我试图将文件上传到我的服务器并将其存储在"上传"文件。 我遵循了许多教程,但我得到了同样的错误 我正在使用Body-Parser

这是我项目的架构:link

这是我的/上传路由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")

1 个答案:

答案 0 :(得分:0)

您的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
});

处理发布请求:

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和文件上传时,您必须在enctype='multipart/form-data'标记中提供form

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