Я создаю форму регистрации с S3 с загрузкой фотографий и моделью пользователя MongoDB для сохранения данных.
Рассмотрим клиента:
import React, { useState, useEffect } from 'react'
const [name, setName] = useState('');
const [password, setPassword] = useState('');
const [email, setEmail] = useState('');
const [image, setImage] = useState('');
const formData = new FormData();
formData.append('singleFile', image);
formData.append('email', email);
formData.append('name', name);
formData.append('password', password);
const options = {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(formData)
};
fetch('/signup', options).then(res => res.json())
.then(data => {
...
});
return (
<>
<input type='text' placeholder='Name' required value={name} onChange={e => setName(e.target.value)} />
<input type='text' placeholder='Email' required value={email} onChange={e => setEmail(e.target.value)} />
<input type='password' placeholder='Password' required value={password} onChange={e => setPassword(e.target.value)} />
<input type="file" accept='image/*'
onChange={e => setImage(e.target.files[0])} />
</>
)
И Node JS Маршрут:
const express = require('express');
const router = express.Router();
const { signUp} = require('../controllers/authController');
// AWS
const AWS = require('aws-sdk');
const multer = require("multer");
const multerS3 = require("multer-s3");
const uuid = require('uuid');
const s3 = new AWS.S3({
accessKeyId: process.env.AWS_ACCESS_KEY,
secretAccessKey: process.env.AWS_SECRET_KEY,
region: process.env.AWS_REGION,
});
const BucketName = 'clone-insta-bucket';
const uuid_name = uuid.v4();
console.log('process.env.AWS_SECRET_KEY', process.env.AWS_SECRET_KEY);
const signUpUploader = multer({
storage: multerS3({
s3: s3,
bucket: BucketName,
// acl: 'public-read',
metadata: function (req, file, cb) {
console.log("Got request from ...");
cb(null, {
OriginalFileName: file.originalname.toLowerCase(),
RandomName: uuid_name,
});
},
key: function (req, file, cb) {
cb(null, file.originalname);
}
})
});
....
router.post('/signup', signUpUploader.single("singleFile"), signUp);
...
module.exports = router;
И Контроллер:
exports.signUp = async (req, res, next) => {
const pathBucket = req.file.key;
console.log('pathBucket', pathBucket);
// do more stuff with the pathBucket
...
};
Каждый раз, когда пользователь нажимает на детали регистрации, ничего не происходит, файл не загружен, и ответ от S3 не поступает, и, конечно же, в Bucket ничего не сохраняется.
Я пытался понять, чего не хватает в конфигурациях, но ничего не нашел.
Что может вызвать эту проблему?