2016-01-09 25 views
6

Robię prosty system przesyłania plików z multer:Jak ograniczyć rozmiar pliku podczas przesyłania za pomocą multer?

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

to wszystko działa poprawnie, a plik zostanie przesłany. Jedyną rzeczą, która nie działa, jest limit maksymalnego rozmiaru. Zrobiłem to, aby plik onfileupload zaczął sprawdzać rozmiar pliku, a jeśli jest duży, zwróci false. Ale plik wciąż jest ładowany.

Wygląda na to, że onFileUploadStart nic nie robi. Próbowałem coś w nim, ale nic.

Co robię źle? Jak mogę ograniczyć rozmiar pliku podczas przesyłania za pomocą multer?

+0

Gdzie widziałeś, że trzeba powrócić 'FALSE jeśli' req.files.file.length> maxSize 'w procedurze obsługi even' onFileUploadStart'? – nbro

+0

Samouczek, który śledziłem. Ale zakładam, że nie jest to właściwy sposób na przerwanie przesyłania? –

+0

Czy możesz "console.log" (przed instrukcją if) pliku w tej samej obsługi? Co widzisz? – nbro

Odpowiedz

20

Nie ma onFileUploadStart z nowym interfejsem API multer. Jeśli chcesz ograniczyć rozmiar pliku, należy zamiast dodawać limits: { fileSize: maxSize } do obiektu przekazany do multer():

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

Dzięki, że rzeczywiście działa. czy możliwe jest przekazanie błędu? jak rozmiar pliku jest zbyt duży? –

+5

Powinieneś być w stanie dodać obsługę błędów Express i sprawdzić 'err.code === 'LIMIT_FILE_SIZE''. – mscdex

+0

@mscdex możesz podać przykład dla tego samego –