2017-06-07 5 views
0

qu'est-ce que "upload.array ('photos', 3)" dans le code suivant indique ....Je suis tout à fait faible à l'aide multer-s3 pour télécharger l'image au seau aws

Mon code html . (Code réduit par souci de concision)

<form action="/upload" method="POST"> 
<input type="file" name="pic" id="pic" accept="image/*"> 
<input type="submit"> 
</form> 

mon code express.js

AWS.config.update({ 
    accessKeyId: "xxxxxxxxxxxxx", 
    secretAccessKey: "yyyyyyyyyy", 
    "region": "zzzzzzzzz" , 
    signatureVersion: 'v4' 
}); 

var s3=new AWS.S3(); 

var upload = multer({ 
    storage: multerS3({ 
    s3: s3, 
    bucket: 'imgcontainer', 
    metadata: function (req, file, cb) { 
     cb(null, {fieldName: file.fieldname}); 
    }, 
    key: function (req, file, cb) { 
     cb(null, Date.now().toString()) 
    } 
    }) 
}) 

app.post('/upload', upload.array('photos', 3), function(req, res, next) { 
    res.send('Successfully uploaded ' + req.files.length + ' files!') 
}) 

sortie:

Cannot read property 'length' of undefined 

Répondre

1

Il y a deux questions:

  • Le nom du champ de fichier est ' pic 'et non' photos '(qui est le nom du champ bei ng utilisé du côté Express). Changez un nom ou l'autre.

  • L'attribut enctype="multipart/form-data" doit être explicitement indiqué sur l'étiquette <form>, sinon les navigateurs envoyer le formulaire application/x-www-form-urlencoded qui ne comprennent pas les données d'entrée de fichier.

Faire ces changements et req.files doivent être renseignés, comme indiqué dans la documentation multer.

+0

Merci pour votre réponse mscdex, "upload.array (" pic "3)" ... alors ce que représente 3 ..... –

+0

[La documentation] (https://github.com/expressjs/multer # arrayfieldname-maxcount) l'explique, c'est le paramètre 'maxCount' (impose une limite de fichier maximum pour ce nom de champ de fichier). – mscdex

+0

Même erreur "Impossible de lire la propriété 'longueur' de indéfini" même après avoir changé les photos en pic ..... désolé –