@maxemga

FormData отправляется в AXIOS, но FETCH не работает, как отправить через fetch?

С помощью multer я загружаю картинку на сервер и для этого мне нужно отправить картинку в FormatData
С помощью Axios она отправляется и я могу получить ее с помощью req.file, но с fetch при req.file он ее не находит, но я хочу отправить fetch, как это можно сделать?
Axios запрос:
const formatData = new FormData();
formatData.append('image', image)
Axios.post('http://localhost:5000/api/settings/change', formatData).then(response => console.log(response.data))

Fetch запрос:
const formatData = new FormData();
formatData.append('image', image)
const data = await request('/api/settings/change', 'POST', formatData)

Сам хук Fetch:
const request = useCallback(async (url, method = 'GET', body = null, headers = {}) => {
        setLoading(true)
        try {   
            if (body) {
                body = JSON.stringify(body)
                headers['Content-Type'] = 'application/json'
            }  

            const responce = await fetch(`http://localhost:5000${url}`, {
               method, body, headers
            })
            const data = await responce.json()
            if (!responce.ok) {
                throw new Error(data.message)
            }
            setLoading(false)
            
            return data

        }
        catch(e) {
            setLoading(false);
            setError(e.message)
            throw e
        }      
    }, [])

И даже если отправять через Axios, то как мне можно отправить несколько объектов, а не только FormData?
Просто у меня есть еще объект, который надо отправить в форме:
const values={{
                                image: '',
                                name: '',
                                gender: '',
                                city: ''
}}
  • Вопрос задан
  • 66 просмотров
Решения вопроса 1
@Mellorn
if (body) {
                body = JSON.stringify(body)
                headers['Content-Type'] = 'application/json'
            }


Вы же тут body пытаетесь явно привести к JSON. Но т.к. вы передаёте в качестве body объект FormData, то на выходе получаете фигню. Поскольку при использовании FormData вы должны отправлять не JSON, а multipart/form-data.

И касаемо:

И даже если отправять через Axios, то как мне можно отправить несколько объектов, а не только FormData?

Никак.
У вас есть FormData вот и заполняйте этот объект всеми необходимыми значениями. А его уже отправляйте.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@zkrvndm
Боты, парсеры, расширения
Когда вы добавляйте файл в FormData вы должны третьим параметром передавать имя файла, чего я у в вас не наблюдаю.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
07 мая 2021, в 11:29
15000 руб./за проект
07 мая 2021, в 11:09
100000 руб./за проект
07 мая 2021, в 11:08
45000 руб./за проект