【问题标题】:Multer File Upload errorMulter 文件上传错误
【发布时间】:2018-05-27 17:29:54
【问题描述】:

当我尝试上传文件时,我正在使用 multer 上传文件,它显示错误以下是我的代码

var multer = require('multer');

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

var upload = multer({ storage: storage });

我在 ejs 视图中的表单是

<form action="class/<%= record.Class_Name %>/detial" method="post" enctype="multipart/form-data">
     <input type="text" name="UploaderName">
     input type="text" name="Title" >
     <input type="file" name="ThesisFile">
      <button type="submit">Choose File</button>
 </form>

我的路线代码是

router.post('/Class/:name/detial' , isLoggedIn , upload.single('ThesisFile') , function(req ,  res , next) {
  var Name = req.body.UploaderName;
  var Title = req.body.Title;
  var file = req.body.ThesisFile;
  var thesis = {
    Submitted_By: Name,
    Title : Title,
    File: file
  };
  ClassModel.findOne({ Class_Name : req.params.name } , function(err , record) {
    record.ClassFiles.push(thesis);
        record.save().then(function(record) {
          req.flash('sucess_msg' , 'Thesis Added Sucessfully');
          res.render('class' , {
            "record" : record
          });
        });
  });
});

当我提交表单时,它会显示以下错误

【问题讨论】:

  • 问题来自您的表单action
  • 应该是什么?
  • 我认为传递给动作的路由是错误的。
  • 它在没有 multer 的情况下将数据传递给 db

标签: node.js mongodb express multer


【解决方案1】:
<form id="myForm" name="myForm" action="class/<%= record.Class_Name %>/detial" method="POST" enctype="multipart/form-data">
  <input type="text" name="uploaderName">
  <input type="text" name="title" >
  <input type="file" id="thesisFile" name="thesisFile">
  <button type="submit">Upload</button>
</form>

您可以在 JavaScript 中处理请求,而不是在 html 中处理。

const $ = (selector) => {
  return document.querySelector(selector);
};

const submit = (event) => {
  event.preventDefault();
  const form = $("#myForm");
  const thesisFile = $("#thesisFile").files[0];

  const oData = new FormData(form);

  const request = new XMLHttpRequest();

  // replace "/Class/:name/detial" appropriately
  request.open("POST", "/Class/:name/detial", true);

  request.onload = (event) => {
    if (request.status === 200) {
      // do something
    } else {
      console.log("Error occurred");
    }
  };

  request.send(oData);
};

const form = document.forms.namedItem("myForm");
form.onsubmit = submit;

【讨论】:

    猜你喜欢
    • 2016-03-06
    • 2021-08-16
    • 1970-01-01
    • 2022-08-03
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 2018-02-25
    相关资源
    最近更新 更多