2016-07-29 6 views
1

filtern Wie der Titel der Frage erklärt, muss ich hochgeladene Dateien auf der Basis der Dateierweiterung filtern. Also, ich ging durch die offiziellen Dokumente und suchte diese Website.Dateien auf der Grundlage der Erweiterung mit Hilfe von Multer in Express JS

Was ich

Ich habe versucht, Lösungen versucht haben, stieß ich auf. Dateien werden erfolgreich hochgeladen, aber das Problem besteht darin, Dateien zu filtern. Momentan sieht meine Router.js Datei so aus.

Router.JS

var multer = require('multer'); 
var storage = multer.diskStorage({ //multers disk storage settings 
    destination: function (req, file, cb) { 
     cb(null, './public/uploads/') 
    }, 
    limits:{ 
     files: 1, 
     fileSize: 1024 * 1024 
    }, 
    filename: function (req, file, cb) { 
     var datetimestamp = Date.now(); 
     cb(null, file.fieldname + '-' + datetimestamp + '.' + file.originalname.split('.')[file.originalname.split('.').length -1]) 
    }, 
    onFileUploadStart: function(file) { 
     console.log("Inside uploads"); 
     if (file.mimetype == 'image/jpg' || file.mimetype == 'image/jpeg' || file.mimetype == 'image/png') { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
}); 
var upload = multer({ //multer settings 
    storage: storage 
}).single('profilepic'); 


router.post('/profile', function(req, res){ 
    upload(req,res,function(err){ 
     if(err) 
     { 
      console.log(err); 
     } 
     else 
     { 
      console.log("Image was uploaded"); 
     } 
    }); 
}); 

habe ich versucht, etwas in onFileUploadStart Echo zu überprüfen, ob es in dieser Funktion wird oder nicht. Und es war nicht. Neben onFileUploadStart habe ich auch versucht fileFilter wie an dieser Stelle link erwähnt, aber es war nicht hilfreich. Irgendwelche Vorschläge, wie man das löst? Danke im Voraus.

Antwort

4

ein Beispiel unter Verwendung multer:

var storage = multer.diskStorage({ //multers disk storage settings 
    destination: function (req, file, cb) { 
     cb(null, './public/uploads/') 
    }, 
    filename: function (req, file, cb) { 
     var datetimestamp = Date.now(); 
     cb(null, file.fieldname + '-' + datetimestamp + '.' + file.originalname.split('.')[file.originalname.split('.').length -1]) 
    } 
}); 

var upload = multer({ //multer settings 
    storage: storage, 
    fileFilter: function (req, file, callback) { 
     var ext = path.extname(file.originalname); 
     if(ext !== '.png' && ext !== '.jpg' && ext !== '.gif' && ext !== '.jpeg') { 
      return callback(new Error('Only images are allowed')) 
     } 
     callback(null, true) 
    }, 
    limits:{ 
     fileSize: 1024 * 1024 
    } 
}).single('profilepic'); 

Auszug aus Node.js - File upload. Die ursprünglichen Autoren waren Iceman und Mikhail. Zuordnungsdetails finden Sie unter contributor page. Die Quelle ist unter CC BY-SA 3.0 lizenziert und kann in der Documentation archive gefunden werden. Referenzthemen-ID: 4080 und Beispiel-ID: 14210.

-1

Wenn Sie auf dem Web-Entwicklung verwendet werden, können Sie am vorderen Ende validiert werden, nicht an das Backend übergeben, können Sie versuchen:

var file = files[0]; 
var imageType = /image.*/; 

if (!file.type.match(imageType)) { 
    // do something 
} 
Verwandte Themen