2017-09-30 1 views
0

Ich benutze Body-Parser, Express und Multer in meiner NodeJS App. Ich muss Image und einige Textfelder in Anmeldeform hochladen. Ich benutze Multer dafür, ich habe genau die gleiche Sache hier vorgeschlagen - https://stackoverflow.com/questions/35847293/uploading-a-file-and-passing-a-additional-parameter-with-multerHochladen von Bild und Text mit Multer in Knoten JS

Aber ich bekomme leere Objekt in req.body. Dateien werden im Zielordner erstellt, req.files.forJede Methoden protokolliert jedoch leere Ergebnisse.

ist hier mein Code:

HTML-Frontend Code

  <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> 

Server Side-Code:

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"); 
       } 
       }); 

    }); 

Protokollausgabe in Knoten:

{} 
[] 
+0

Ich habe den genauen Code kopiert und es versucht. Und alles funktioniert gut mit dem Körper und der Datei, die auf der Konsole protokolliert wird. Also, vielleicht das Problem mit anderem Code? vielleicht eine Middleware? hoffe das hilft. –

+0

ist Ihr Problem gelöst? – Sagar

+0

Ja, eigentlich habe ich vergessen, '#' hinzuzufügen, während der Klick auf die Schaltfläche referenziert wird. – Anirudh

Antwort

0

Versuchen Sie, Ihren Multer außerhalb des req body zu verschieben, und versuchen Sie, den Parameter filename einzubeziehen. Ich habe deinen Code geändert.

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) 


}); 
Verwandte Themen