2016-01-09 17 views
6

Ich mache ein einfaches Datei-Upload-System mit multer:Wie kann die Dateigröße beim Hochladen mit Multer begrenzt werden?

var maxSize = 1 * 1000 * 1000; 

var storage = multer.diskStorage({ 
    destination: function (req, file, callback) { 
    callback(null, 'public/upload'); 
    }, 
    filename: function (req, file, callback) { 
    callback(null, file.originalname); 
    }, 
    onFileUploadStart: function(file, req, res){ 
    if(req.files.file.length > maxSize) { 
     return false; 
    } 
    } 

}); 

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

router.post('/upload',function(req,res){ 
    upload(req,res,function(err) { 
     if(err) { 
      return res.end("Error uploading file."); 
     } 
     console.log(req.file); 
     res.redirect(req.baseUrl); 
    }); 
}); 

Das alles funktioniert gut und die Datei hochgeladen wird. Das einzige, was nicht funktioniert, ist die maximale Größe. Ich habe es so gemacht, dass onfileupload startet die Größe der Datei überprüft wird und wenn es zu groß ist, wird es false zurückgeben. Aber die Datei wird nur noch hochgeladen.

Es scheint, dass onFileUploadStart überhaupt nichts tut. Ich habe versucht, console.log etwas darin, aber nichts.

Was mache ich falsch? Wie kann ich die Dateigröße beim Hochladen mit Multer begrenzen?

+0

Wo Sie gesehen haben, dass Sie 'false' wenn' req.files.file.length> maxSize zurückgeben müssen 'im handler des even' onFileUploadStart'? – nbro

+0

Ein Tutorial, dem ich folgte. Aber ich nehme an, Sie sagen, das ist nicht der richtige Weg, um den Upload zu stoppen? –

+0

Kannst du 'console.log' (vor der if-Anweisung) die Datei in demselben Handler? Was siehst du? – nbro

Antwort

20

Es gibt keine onFileUploadStart mit der neuen multer API. Wenn Sie die Dateigröße beschränken möchten, sollten Sie stattdessen limits: { fileSize: maxSize } auf die zu multer() gebene Objekt hinzufügen:

var upload = multer({ 
    storage: storage, 
    limits: { fileSize: maxSize } 
}).single('bestand'); 
+0

Danke, das funktioniert in der Tat. Ist es möglich, den Fehler zu übergeben? wie Dateigröße ist zu groß? –

+5

Sie sollten einen Express-Fehlerhandler hinzufügen und 'err.code == 'LIMIT_FILE_SIZE' überprüfen können. – mscdex

+0

@mscdex können Sie bitte ein Beispiel für das gleiche geben –

Verwandte Themen