【问题标题】:Uploading image and text using multer in Node JS在 Node JS 中使用 multer 上传图像和文本
【发布时间】:2017-09-30 12:56:01
【问题描述】:

我在我的 NodeJS 应用程序中使用 body-parser、express 和 multer。 我需要在注册表单中上传图片和几个文本字段。我为此使用multer,我尝试了与here建议完全相同的东西

但我在req.body 中得到了空对象。 正在目标文件夹中创建文件,但 req.files.forEach 方法记录空结果。

这是我的代码:

HTML前端代码

         <form id="form" enctype="multipart/form-data" action="/profile"  method="post" >

           <label>Name</label>
           <input type="text" placeholder=" Name" name="name" id="name" class="form-control">

           <label>Logo</label>
           <input type="file" placeholder="Logo" name="logo" id="logo" class="form-control">

           <button id="addform" type="submit" class="btn btn-primary">Add Profile</button>


        </form>

服务器端代码:

    app.post('/profile', function(req, res) {

      var storage = multer.diskStorage({
              destination: __dirname+'/file/uploads/'
          });
     var upload = multer({ storage : storage}).any();

          upload(req,res,function(err) {
              if(err) {
                  console.log(err);
                  return res.end("Error uploading file.");
              } else {
                 console.log(req.body);
                 console.log(req.files);
                 req.files.forEach( function(f) {
                   console.log(f);
                   // and move file to final destination...  
                 });
                res.end("File has been uploaded");
              }
              });

    });

节点中的日志输出:

{}
[]

【问题讨论】:

  • 我已经复制了确切的代码并尝试了它。身体和记录到控制台的文件一切正常。那么,也许是其他代码的问题?也许是中间件?希望这会有所帮助。
  • 您的问题解决了吗?
  • 是的,实际上我在引用按钮单击时忘记添加“#”。
  • 请将其标记为答案。

标签: javascript node.js express multer


【解决方案1】:

尝试将 Multer 移出 req 正文并尝试包含文件名参数。我修改了你的代码。

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

var upload = multer({ storage: storage })

//passing multer as middleware
app.post('/profile',upload.any(), function(req, res) {
   console.log(req.body)


 });

【讨论】:

    【解决方案2】:

    请重新检查您的表单并确保您已将名称属性添加到您的输入字段。我遇到了同样的问题,并且同样试图找到,但是当查看 multer 文档并发现它不会阻止 req.body 时,我检查了我的表单并发现我的其他字段没有name 属性,只有 id 存在。

    【讨论】:

      猜你喜欢
      • 2020-09-26
      • 2021-07-25
      • 2018-09-16
      • 1970-01-01
      • 2020-11-29
      • 2018-09-13
      • 2020-11-06
      • 2021-08-29
      • 1970-01-01
      相关资源
      最近更新 更多