Я совершенно слаб в использовании multer-s3 для загрузки изображения в ведро aws s3

Что означает "upload.array('photos', 3) " в следующем коде...

Мой HTML-код. (код сокращен для краткости)

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

мой экспресс-код

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!')
})

выход:

 Cannot read property 'length' of undefined

1 ответ

Решение

Есть две проблемы:

  • Имя поля файла - "pic", а не "photos" (это имя поля, которое используется на стороне Express). Измените одно имя или другое.

  • enctype="multipart/form-data" атрибут должен быть явно установлен на <form> тэг, в противном случае браузеры будут отправлять форму в виде application/x-www-form-urlencoded, которая не будет содержать входных данных файла.

Внести эти изменения и req.files должны быть заполнены, как указано в multer документация.

Другие вопросы по тегам