Я совершенно слаб в использовании 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
документация.