Задать вопрос

Как передать фото на сервер с использованием api?

Делаю запрос на сервер при помощи axios

const sendPhoto = async (e) => {
    e.preventDefault();

    let fd = new FormData();
    fd.append("image", file);

    let data = await axios.post("http://127.0.0.1:8000/api/post", fd);

    return console.log(data.data);
  };


И обрабатываю на сервере

$rules = [
        'image' => "image"
    ];

    $validator = Validator::make($req->all(), $rules);

    if ($validator->fails()) {
        return response()->json(['val' => false, 'img' => $req->image]);
    }

     if (!$req->hasFile('image')) {
         return response()->json(['image' => "undefined", 'img' => $req->image]);
     }


Валидатор выдает ошибку говоря, что я передаю не фото, а строку, hasFile тоже выдает false. Я пробовал менять axios на fetch
const data = await fetch("http://127.0.0.1:8000/api/post", {
       method: "POST",
      body: fd,
    });

     const res = await data.json()

return console.log(res);


Но валидацию на сервере фото все равно не проходит. Еще я пробовал вместо FormData использовать:
headers: {
        "Content-Type": "multipart/form-data",
      },


Но и это мне не помогло
  • Вопрос задан
  • 371 просмотр
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Javascript.ru
    Курс по React
    5 недель
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 1
alvvi
@alvvi
export default apathy;
Но валидацию на сервере фото все равно не проходит. Еще я пробовал вместо FormData использовать:

А почему вместо? И то и другое нужно.

Правильный запрос:
let formData = new FormData();
formData.append('image', file);
axios.post('http://127.0.0.1:8000/api/post',
    formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    }
 );


На бэке:

if ($request->hasFile('image')) {
  $file = $request->file('image');
}


Ну валидация тоже должна работать, будь то правило image или file.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
IT ATLAS Москва
от 200 000 до 250 000 ₽
ITK academy Казань
от 50 000 до 90 000 ₽