2016-01-09 16 views
6

Tôi đang thực hiện một hệ thống tập tin tải lên đơn giản với multer:Làm cách nào để giới hạn kích thước tệp khi tải lên bằng 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); 
    }); 
}); 

này tất cả hoạt động tốt và các tập tin được tải lên. Điều duy nhất không hoạt động là giới hạn về kích thước tối đa. Tôi đã làm cho nó để onfileupload bắt đầu kích thước của tập tin được kiểm tra và nếu nó lớn nó sẽ trả về false. Nhưng tệp vẫn chỉ được tải lên.

Dường như onFileUploadStart không làm gì cả. Tôi đã cố gắng để console.log một cái gì đó trong đó, nhưng không có gì.

Tôi đang làm gì sai? Làm cách nào để giới hạn kích thước tệp khi tải lên bằng multer?

+0

ở đâu bạn thấy rằng bạn cần phải trả lại 'false' nếu' req.files.file.length> MAXSIZE 'trong bộ xử lý của' onFileUploadStart' ngay cả? – nbro

+0

Hướng dẫn tôi đang theo dõi. Nhưng tôi giả sử u nói đây không phải là cách đúng để dừng việc tải lên? –

+0

Bạn có thể 'console.log' (trước câu lệnh if) tệp trong cùng một trình xử lý đó không? Bạn thấy gì? – nbro

Trả lời

20

Không có onFileUploadStart với API multer mới. Nếu bạn muốn giới hạn kích thước tập tin, bạn thay vì nên thêm limits: { fileSize: maxSize } đến đối tượng thông qua với multer():

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

Cảm ơn rằng các công trình thực sự. là nó có thể vượt qua lỗi? như các tệp quá lớn? –

+5

Bạn sẽ có thể thêm trình xử lý lỗi Express và kiểm tra 'err.code === 'LIMIT_FILE_SIZE''. – mscdex

+0

@mscdex bạn có thể vui lòng đưa ra một ví dụ cho cùng một số –

Các vấn đề liên quan