2017-09-02 5 views
-1

J'ai un image collection de schéma suivant:comment enregistrer l'image dans le dossier et enregistrer imagePaths à la base de données dans la pile en utilisant MEAN Multer

{ 
"productId": {type: String}, 
"imagePaths": {type: Array} 
} 

Je veux télécharger plusieurs images et stocker correspondant image-paths à la base de données. J'ai cherché, et j'ai appris que Multer peut effectuer cette action, mais je suis incapable de télécharger et d'enregistrer des chemins d'image pour plusieurs images.


J'ai essayé avec ce code angulaire,

scope.demoMethod = function(){ 
    console.log('Method fired.'); 
    var product = $scope.product; 
    $http.post('/demo/upload', $scope.product) 
     .then(function (res) { 
     console.log('Form Data ::' + $scope.product); 
    }); 
}, 

Mais j'obtiens l'erreur, ne peut pas lire la propriété « foreach » undefined

Répondre

0

Au début, vous devez définir le stockage sur disque, le lieu où votre fichier doit être sauvegardé

const storage = multer.diskStorage({ 
    destination: (req, file, cb) => { 
    cb(null, `${global.uploadDir}/temp`); // folder path 
    }, 
    filename: (req, file, cb) => { 
    cb(null, `${uuid()}.${mime.extension(file.mimetype)}`); // file name here 
    } 
}); 

multer = multer({ storage }); 

Puis ajoutez multer dans vos routes comme middleware

router.post('/upload', multer.any(), (req, res) => { 
    console.log(req.files) // should be array of files you have uploaded 
    const imagePaths = []; 
    req.files.forEach(f => { 
     imagePaths.push(f.path); 
    }); 
    const product = new Product(); // model name 
    product.imagePaths = imagePaths; 
    ... 
    product.save(); 
    ... 
}); 

Aussi, vous pouvez spécifier des fichiers de filtre de

const fileFilter = (req, file, cb) => { 
    const isAllowed = utils.isAllowed(mime.extension(file.mimetype)); // your validation condition here 
    if (!isAllowed) { 
     return cb(new Error('This file is not allowed')); 
    } 
    cb(null, true); 
} 

multer = multer({ storage, fileFilter }); 

et la limite

const limits = { fileSize: 50 * 1024 * 1024 /* 50MB */ }; 

multer = multer({ storage, limits }); 
+0

ok, quid du côté angulaire, côté frontal? –

+0

J'ai essayé votre code avec ce ** code angulaire **, 'scope.demoMethod = function() { console.log ('Méthode cuite.'); var product = $ scope.product; $ http.post ('/ demo/upload', $ scope.product) .then (fonction (res) { console.log ('Données de formulaire ::' + $ scope.product); }); } ', Mais je reçois une erreur,' ne peut pas lire la propriété 'forEach' de undefined' –