Я изо всех сил пытаюсь найти решение для загрузки двух файлов в s3. Я могу загрузить один файл с помощью multer, и я научился это делать, но когда я пытаюсь сделать карту внутри всех файлов в formdata и загрузить каждый файл, я помещаю sh в массив каждого URL-адреса местоположения, который является единственным Сохраняю в своей базе. Затем я пытаюсь распечатать каждый URL-адрес, но, к моему удивлению, они печатаются внутри оператора if, но не тогда, когда я сохраняю его в базе данных вне if. Может быть, из-за асинхронной проблемы ?. Спасибо.
tournamentsCtrl.createTournament = async (req, res) => {
var files_upload = []
if (req.files) {
aws.config.setPromisesDependency();
aws.config.update({
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
//region: process.env.REGION
});
const s3 = new aws.S3();
req.files.map((item) => {
var params = {
ACL: 'public-read',
Bucket: process.env.AWS_BUCKET_NAME,
Body: fs.createReadStream(item.path),
Key: `tournament_img/${uuidv4()/* +req.file.originalname */}`
};
await s3.upload(params, (err, data) => {
if (err) {
console.log('Error occured while trying to upload to S3 bucket', err);
}
if (data) {
fs.unlinkSync(item.path); // Empty temp folder
const locationUrl = data.Location;
files_upload.push(locationUrl);
console.log(files_upload)
}
});
});
}
console.log(files_upload)
const new_data = { ...JSON.parse(req.body.values), img_source: files_upload[0], info_url: files_upload[1] }
console.log(new_data)
const newUser = new Tournaments(new_data);
newUser
.save()
.then(user => {
res.json({ message: 'User created successfully', user });
})
.catch(err => {
console.log('Error occured while trying to save to DB');
});
};