6 votes

Le téléchargement Multer n'est pas une fonction

Je suis en train d'utiliser Multer pour créer un système d'envoi de fichiers. J'ai suivi les instructions de la page Github mais ça ne fonctionne pas. Je reçois

const express= require('express');
const app = express();
const multer = require('multer');

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

const upload = multer({ storage: storage });

app.post('/editPhoto',upload.single('avatar'),function(req,res,next){
  upload(req,res,function(err){   
      if(err){
        res.json({success:false,message:err});

      }
      else{
        res.json({success:true,message:"La photo a été mise à jour !"});
      } 

  });
});

Je reçois TypeError: upload n'est pas une fonction

Qu'est-ce que je fais de mal ?

EDIT

J'ai fait comme vous avez dit et comme le document le stipule.

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

app.post('/editPhoto',function(req,res,next){

  var upload = multer({ storage:storage}).single('userPhoto');
  upload(req,res,function(err){   
      console.log(req.file);
      if(err){
        res.json({success:false,message:err});
      }
      else{
        res.json({success:true,message:"La photo a été mise à jour !"});
      } 
  });
});

req.file est indéfini

et quand j'essaie comme ceci

var upload = multer({ storage:storage});

app.post('/editPhoto',function(req,res,next){
  upload(req,res,function(err){   
      console.log(req.file);
      if(err){
        res.json({success:false,message:err});
      }
      else{
        res.json({success:true,message:"La photo a été mise à jour !"});
      } 
  });
});

Je reçois upload n'est pas une fonction

4voto

Alexandru Olaru Points 3262

Comme @Aabid l'a indiqué dans les commentaires, vous n'aurez pas besoin d'utiliser à la fois le middleware multer et l'upload dans le contrôleur.

Vous pouvez utiliser :

app.post('/editPhoto', upload.single('avatar'), (req, res, next) => {
   // ici, dans req.file, vous aurez le fichier avatar téléversé
})

Ou vous pouvez utiliser :

app.post('/editPhoto', (req, res, next) => {
  upload(req, res, function (err) {
    if (err) {
      // C'est une bonne pratique lorsque vous voulez gérer vos erreurs différemment

      return
    }

    // Tout s'est bien passé
  })
})

Donc, vous utilisez l'une des 2 méthodes, pas les deux en même temps.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X