2017-02-03 8 views
1

Ich möchte Bilder mit Multer hochladen. Aber es funktioniert nicht. Was ist hier falsch?Wie Dateien hochladen mit Multer in Node.js?

Dieser Code befindet sich in meiner Routendatei.

var multer = require('multer'); 
var upload = multer({ dest: 'public/uploads/' }); 

Und das ist meine Post Route.

router.post('/addNewFood', upload.single('avatar'),function (req, res, next) { 
console.log(req.files); 
}); 
+0

http://lollyrock.com/articles/express4-file-upload/ –

+0

irgendein spezifischer Fehler? –

Antwort

0

Versuchen Sie es, es funktioniert für mich. Verwendet Express und Knoten.

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

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

 
router.post('/addNewFood', //Your authentication check,// 
 
    function (req, res, next) { 
 

 
    upload(req, res, function(err) { 
 
     if (err) { 
 
      res.redirect(req.headers.referer + "/error.html"); 
 
      return; 
 
     } 
 

 
     if (!req.files) { 
 
      res.redirect(req.headers.referer + "/error.html"); 
 
      return; 
 
     } else { 
 
      //Implement your own logic if needed. Like moving the file, renaming the file, etc. 
 
      res.redirect(req.headers.referer); 
 
     } 
 
    }); 
 
    } 
 
);

1

Achten Sie darauf, das Paket

npm --save multer

installieren installieren Sie die folgende Art und Weise versuchen, In der Server-Seite, In Ihren Routen oder Controller-Datei konfigurieren Sie die Multer:

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

Im Speicherobjekt steht Ziel für, wo die Datei hochgeladen wird. Stellen Sie daher sicher, dass in Ihrem Projektverzeichnis der Pfad/public/images/uploads erstellt wird. Andernfalls möchten Sie möglicherweise den Dateipfad ändern.

Auch im Speicherobjekt Dateiname steht für, was wird der hochgeladene Dateiname sein. Hier füge ich die aktuelle Uhrzeit mit dem ursprünglichen Dateinamen hinzu, um den Dateinamen eindeutig zu machen.

Jetzt in Ihrem gewünschten Routing an, dass

router.post('/', upload.single('image'), (req, res) => { 
    //here your other task. 
}); 

Jetzt Dateien hochgeladen. Stellen Sie sicher, dass die Clientseite denselben Namen verwendet, in diesem Fall 'image'.

<input type="file" name="image" id="image" class='form-control'> 

Dies ist eine Upload-Prozedur für eine einzelne Datei. Für mehrere Dateien

router.post('/', upload.array(), function (req, res, next) { 
    //your task goes here 
}); 

Weitere Informationen dieses link überprüfen.

Verwandte Themen