如何使用jquery ajax在laravel中上传文件

时间:2019-05-13 09:11:00

标签: jquery ajax validation laravel-5

图片必须是图像,并且文件类型: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); 
            }

请注意,我在同一页面上更新用户的社交媒体链接,但是仅在更新他们的社交媒体链接时,它会很好地工作。仅在尝试更新图像时,我会收到这些错误消息。

0 个答案:

没有答案