2016-11-14 4 views
0
app.post("/", upload.single("avatar"), function(req, res, next){ 
    var writestream = gfs.createWriteStream({ 
     filename: req.file.filename 
    }); 
    fs.createReadStream("./uploads/kkm/" + req.file.filename)  
     .on("end", function() { 
      fs.unlink("./uploads/kkm/"+ req.file.filename, function(err) { 
       res.send("success") 
      }) 
     }) 
     .pipe(writestream);  
}); 

Je veux télécharger 2 images à mongodb, je peux créer des flux d'écriture et de lecture pour une image mais l'idée perdue pour deux fichiers.multi télécharger mongodb gfs

Je peux canaliser une image mais pas deux. Lorsque je tente medthod tableau, il replys

"TypeError: Cannot read property 'filename' of undefined" ERROR.

Mon but est de télécharger deux fichiers à MongoDB dans une méthode ou ce que jamais à la fois. Comment puis-je atteindre cet objectif?

Répondre

1

Les méthodes GridFS insèrent un fichier par appel, mais vous pouvez facilement y parvenir. Vous devez utiliser loop dans votre application Node.JS et envoyer le fichier un par un à GridFS.

si vous utilisez multer vous pouvez faire quelque chose comme ça

const storage = multer.diskStorage({ 
    destination: (req, file, callback) => { 
     callback(null, './.temp/uploads'); 
    }, 
    filename: (req, file, callback) => { 
     callback(null, file.fieldname + '-' + Date.now()); 
    } 
}); 
const multerOptions = { 
    storage: storage 
}; 

const upload = multer(multerOptions).array('files[]'); 

module.exports = (req, res, next) => { 
    upload(req, res, (err) => { 
     for (let i in req.files) { 
      const file = req.files[i]; 
      // here you can call GridFS method and upload the file 
     } 
    }); 
}); 
+0

Je comprends ce que vous voulez dire. mais je ne sais pas comment faire. Pourriez-vous s'il vous plaît me donner un indice ou un exemple? –

+0

Bien sûr, j'ai mis à jour la réponse avec le code pour vous si vous ne le comprenez toujours pas, je suis ici pour expliquer –

0
app.post('/upload', function(request, response) { 
    upload(request, response, function(err) { 

var files = new Array (req.file.filename,req.file.namedName) 
    for(var i = 0 ; i < files.length; i++) 
{ 
// here you can call GridFS method 
} 
}); 
  • Merci pour votre aide @Ariel Henryson. Je l'ai fait à ma façon en boucle et cela fonctionne.
  • J'essaie plusieurs fois votre méthode.
  • Je ne sais pas comment utiliser module.exports = (req, res, next) => { La méthode replys ne peut pas publier d'erreur et affiche également une erreur de syntaxe.
  • Où utilisez-vous la méthode app.post?
  • Si cela ne vous dérange pas, pourriez-vous s'il vous plaît écrire le code complet, n'a pas d'importance sinon.