Отправка FormData из React в Node JS через multer S3 не сохраняет изображение в Bucket и не получает ответа от S3 - PullRequest
0 голосов
/ 16 июня 2020

Я создаю форму регистрации с S3 с загрузкой фотографий и моделью пользователя MongoDB для сохранения данных.

enter image description here

Рассмотрим клиента:

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 ничего не сохраняется.

Я пытался понять, чего не хватает в конфигурациях, но ничего не нашел.

Что может вызвать эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...