2017-08-19 1 views
2

Ich benutze Multer für das Senden von Formularen in meiner Express-App. Das Problem besteht darin, dass das Formular eine optionale Option zum Senden von Bildern enthält. Das bedeutet, dass ein Benutzer ein Foto hinzufügen kann, wenn er möchte, aber er kann das Formular auch ohne Bild senden. Es gibt kein Problem mit der Bildübertragung. Aber Multer reicht das Formular nicht ein, wenn es kein Bild gibt, auch nicht die anderen Felder.Wie schicke ich ein Formular mit Multer mit optionaler Dateiübermittlung?

const express = require('express'); 
const router = express.Router(); 
const Company = require('../controller/CompanyController'); 
const multer = require('multer'); 
const path = require('path'); 

let storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
     cb(null, './public/images/logos'); 
    }, 
    filename: function (req, file, cb) { 
     cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname)); 
    } 
}); 

let upload = multer({ storage: storage }).any(); 

router.route('/companies').post(upload, Company.Create); 

module.exports = router; 
+0

anstelle von '.any()' versuchen Sie '.fields ([{name: 'avatar', maxCount: 0}])' '. Ich hoffe, dass dies Ihr Problem lösen wird – Aabid

+0

Das Problem war auf meiner Controller-Ebene. Das hat man manuell behoben, multer hat damit nichts zu tun, was ich später fand. Thnx für die Hilfe btw. Ich benutzte '.array ('logo', 1)', fast dasselbe, aber mehrere Dateien, die ich später brauche. –

Antwort

2

Eine Abhilfe hierfür ist der Wert von req.file einmal Ihre Vorlage geht durch zu überprüfen. Wenn Sie in Ihrem Formular keine Datei angeben, sollte req.file den Wert undefined haben. Wenn Sie jedoch eine Datei senden, sollte es eine object sein. Daher könnten Sie eine einfache if Aussage wie so schreiben:

function Create() { 
    if (req.file !== undefined) { 
    // process image here 
    } 
    // process all other fields 
} 

Hoffe, es hilft!

+0

Vielen Dank für die Antwort. Lief wie am Schnürchen. Obwohl ich 'if (req.files [0])' 'sinch benutze ich die' .array ('logo', 1) 'Methode :) –

Verwandte Themen