Как загрузить файл в laravel, используя jquery ajax - PullRequest
0 голосов
/ 13 мая 2019

Изображение должно быть изображением и типом файла: jpg, jpeg. Я получаю эти сообщения об ошибках, даже если я загружаю действительный файл jpg или jpeg. Я пытаюсь обновить изображение профиля пользователя, столбец уже существует, но он может обнуляться всякий раз, когда они входят в систему.

Теперь я пытаюсь обновить поле изображения профиля и некоторые другие поля. Другие поля работают, но когда я пытался обновить изображение, я получаю сообщение об ошибке, например «Картинка должна быть изображением» или «Картинка должна быть файлом типа: jpg, jpeg».

Изначально я использовал метод jquery onChange, чтобы получать ввод файла всякий раз, когда он изменяется, затем я обрезал его с помощью this.value.replace(/^C:\\fakepath\\/i, ''), затем я передал это усеченное значение в свою функцию ajax в качестве данных

Обрезка входного файла, изначально он пустой .. но я обрезаю его всякий раз, когда он меняется

            var path = '';
            $('.file').on("change", function(){ 
               path = this.value.replace(/^C:\\fakepath\\/i, '');
               $('#fake_btn').text(path);
             });

тогда я передаю его своему Ajax

                   $.ajax({
                        async: true,
                        url: "/user/update_profile",
                        method: 'POST',
                        data: { picture:path,about: $('#about').val(),fb: $('#facebook').val(),tw: $('#twitter').val(),ln: $('#linkendin').val() },
                        success:function(data){
                            if(data['errors']){
                                const ex = data.errors;
                                $('.warning').html('');
                                $('.alert-message').hide();
                                $.each(ex,function(key,value){
                                    $('.alert-message').show();
                                    $('.warning').append('<p>'+value+'</p>');
                                });
                            }else{
                                $('.warning').html('');
                                $('.alert-message').hide();
                                $('.alert-success').fadeIn();
                                $('.success').html(data.message);
                            }
                            $('#update-profile').html('Update');
                            $('#update-profile').hide();
                            $('#loader-icon').fadeOut();
                        }
                    });

Вот как выглядит мой контроллер

    public function update(Request $request){
        $image = "";
            $attribute = Validator::make($request->all(),[
                'picture' => 'image|mimes:jpg,jpeg|max:2048|nullable',
                'about' => 'min:20',
                'fb' => 'min:20|nullable',
                'tw' => 'min:20|nullable',
                'ln' => 'min:20|nullable'
            ]);
            if($attribute->fails()){
                $error = array('errors'=>$attribute->errors());
                return Response()->json($error);
            }
            if(empty($request->picture)){
                $image = 'Null';
            }else{
                $image = $request->picture;
                $image = rand() . '.' . $image->getClientOriginalExtension();
                $image->move(public_path('user_images'), $image);
            }
            $user = User::find(Auth::user()->id);
            $user->about = $request->about;
            $user->image = $image;
            $user->save();
            $fb = empty($request->fb) ? 'Null' : $request->fb;
            $tw = empty($request->tw) ? 'Null' : $request->tw;
            $ln = empty($request->ln) ? 'Null' : $request->ln;

        $userSocialExist = Social::usersocialExist(Auth::user()->id);
            if($userSocialExist){
                $social = Social::where([
                    ['user_id', Auth::user()->id]
                ])->update(['facebook' => $fb,'twitter' => $tw,'linkendin'=>$ln]);
                $data = array('message'=>'social updated!');
                return Response()->json($data); 
            }else{
                $social = new Social();
                $social->user_id = Auth::user()->id;
                $social->facebook = $fb;
                $social->twitter = $tw;
                $social->linkendin = $ln;
                $social->save();
                $data = array('message'=>'social created!');
                return Response()->json($data); 
            }

Обратите внимание, что я обновляю ссылки на социальные сети пользователя на той же странице, но это хорошо работает, когда обновляются только ссылки на социальные сети. Я получаю эти сообщения об ошибках только при попытке обновить изображение.

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