2015-10-19 1 views
1

Я пытаюсь сохранять файлы с multer, но это на самом деле не хотят работать:Nodejs варианты multer не срабатывают

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

var upload = multer({ storage: storage, 
onFileUploadComplete : function (file) { 
    console.log('Completed file!'); 
}, 
onParseStart : function() { 
    console.log('whatevs'); 
}}); 

app.post('/upload' ,upload.single('thisisme'), function(req,res) {}); 

файл не спасутся, но ParseStart или UploadComplete никогда не увольняют. Почему это? Я также попытался использовать app.use (multer ...);

ответ

2

Это потому, что вы пытаетесь использовать старый мультер-апи. В текущей версии нет обработчиков событий: onFileUploadComplete и onParseStart. Пожалуйста, проверьте документацию для деталей API: https://github.com/expressjs/multer

эта часть вашего кода выглядит нормально:

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

и это тоже нормально:

app.post('/upload' ,upload.single('thisisme'), function(req,res) {}); 

это неправильно:

var upload = multer({ storage: storage, 
onFileUploadComplete : function (file) { 
    console.log('Completed file!'); 
}, 
onParseStart : function() { 
    console.log('whatevs'); 
}}); 

изменить его следующим образом:

var upload = multer({ 
    storage: storage, 
    fileFilter:function(req, file, cb) { 
    //Set this to a function to control which files should be uploaded and which should be skipped. It is instead of onParseStart. 
    } 
}); 

Нет ничего вместо onFileUploadComplete. Но:

app.post('/upload' ,upload.single('thisisme'), function(req,res) { 
//this is call when upload success or failed 
}); 

вы можете изменить его к этому:

app.post('/upload', function (req, res) { 
    upload.single('thisisme')(req, res, function (err) { 
    if (err) { 
     // An error occurred when uploading 
     return 
    } 

    // Everything went fine, and this is similar to onFileUploadComplete 
    }) 
})