@weazyq

Как передать фотографию в Fetch запросе?

проблема в том, что вроде бы файл фотографии я получаю если протестировать, но при выполнении Fetch запроса http 500.

JS-ка с самим fetch'ем. Попробовать убрать индекс у files не предлагайте, тоже пробовал суть не меняет проблемы
$('.upload-files').on( 'click', function( event ){
    event.stopPropagation(); // остановка всех текущих JS событий
    event.preventDefault();  // остановка дефолтного события для текущего элемента - клик для <a> тега

    console.log("хай");
    var fileData = document.getElementById('avatar-upload').files;
    console.log(fileData);
    // ничего не делаем если files пустой
    if( typeof fileData == 'undefined' ){
        console.log("тип андефинед");
        return true;
    }
    else{
        console.log("всё супер");
    }

    let files = Array.from(fileData);
    let file = files[0];
    
    console.log(file);

    // Fetch запрос
    fetch('/api/profile.settings', {
        method: 'POST',
        enctype: 'multipart/form-data',
        headers: {
            'Content-Type': 'application/json;charset=utf-8'
        }
    })
        .then(response => response.json()).then(response => {
            if(response.status == "No Content"){
                $('#bgError').text(response.message)
                $('#avatarError').text(response.message)
            }else{
                $('.avatar-upload').submit();
                $('.bg-upload').submit();
            }
    });
});

HTML-ка сама форма с загрузкой фотографии
<form action="" name="avatar" method="get" enctype="multipart/form-data">
                        @csrf
                        <br>
                        <input type="file" name="image" id="avatar-upload" required>
                        <button class="upload-files">Загрузить</button>
                    </form>

Controller осуществляющий логику. С контроллером проблем точно не может быть ибо естественно перед написанием fetch запроса я протестил его не раз
public function UploadImage(Request $request)
    {
        $path = $request->file('image')->store("app/public","public");
        $id = Auth::user()->id;
        $uri = $request->getRequestUri();

        if ($uri == "/avatar.upload"){
            User::where('id',$id)->update(['url_to_img' => "/storage/{$path}"]);
            return response()->json(["message" => "Аватар изменён", 'status' => 'ok'])->setStatusCode(200);
        }
        else if($uri == "/bg.upload"){
            User::where('id',$id)->update(['url_to_bg' => "/storage/{$path}"]);
            return response()->json(["message" => "Фон изменён", 'status' => 'ok'])->setStatusCode(200);
        }
        else{
            return response()->json(["message" => "Фотография не загружена", 'status' => 'No Content'])->setStatusCode(204);
        }
        return redirect(route("settings"));
    }
6297e7557d56c403489757.png
  • Вопрос задан
  • 437 просмотров
Решения вопроса 2
ddv88
@ddv88
Binance Futures
я протестил его не раз

и при этом ошибка 500

console.log
console.log
console.log

Прочитай что ли про дебаг в консоли. и жить станет проще.

Например отправь "что нибудь" на сервер.
fetch(url, {
   method: "POST",
   enctype: 'multipart/form-data',
        headers: {
            'Content-Type': 'application/json;charset=utf-8'
        },
   body: formData
})
Ответ написан
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
Вы файл не отправляете, пустой запрос шлёте.

Напиши конкретно что сделать нужно, я новичок в этом, ну или пример какой может

Поисковики забиты ответами https://yandex.ru/search/?text=как+отправить+файл+...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы