【发布时间】:2022-10-16 18:34:31
【问题描述】:
我正在编写一个为我的应用程序上传个人资料图片的代码。如果我更新图像,则没有错误,但是如果我更新表单,则在执行它时会出现以下错误(在 null 上调用成员函数 move())。谁能建议我哪里出错了?我正在使用 AJAX 进行更新。
在 $upload = $file->move(public_path($path), $new_name); 处调用成员函数 move()
控制器
function updatePicture(Request $request) { $path = 'images/usersprofilepic/'; $file = $request->file('user_image'); $new_name = 'UIMG_'.date('Ymd').uniqid().'.jpg'; //Upload new image $upload = $file->move(public_path($path), $new_name); if (!$upload) { return response()->json(['status' => 0, 'msg' => 'Something went wrong, upload new picture failed.']); } else { // Get Old picture $oldPicture = User::find(Auth::user()->id)->getAttributes()['picture']; if ($oldPicture != '') { if (File::exists(public_path($path.$oldPicture))) { File::delete(public_path($path.$oldPicture)); } } // Update DB $update = User::find(Auth::user()->id)->update(['picture' => $new_name]); if (!$upload) { return response()->json(['status' => 0, 'msg' => 'Something went wrong, updating picture in db failed.']); } else { return response()->json(['status' => 1, 'msg' => 'Your profile picture has been updated successfully']); } } }刀锋形态
<!-- Profile Image --> <div class="card card-primary card-outline "> <div class="card-body box-profile"> <div class="text-center"> <img class="profile-user-img img-fluid " src="{{Auth::user()->picture}}" alt="User profile picture"> </div> <input type="file" name="user_image" id="user_image" style="opacity: 0;height:1px;display:none"> <a href="javascript:void(0)" class="btn btn-primary btn-block" id="change_picture_btn"><b>Change Picture</b></a> </div> <!-- /.card-body --> </div> </div> <div class="dealer_info"> <h5>{{Auth::user()->name}}</h5> <p>{{Auth::user()->address}}<br> {{Auth::user()->city}} {{Auth::user()->country}}</p> </div> </div> </div> <div class="row"> <div class="col-md-6 col-sm-8"> <div class="profile_wrap"> <h5 class="uppercase underline">Profile Settings</h5> <?php if($errors->any()){?><div class="errorWrap"><strong>ERROR</strong>:{{ $errors }}</div><?php } else if(session()->get('success') ){?><div class="succWrap"><strong>SUCCESS</strong>:{{ session()->get('success') }}</div><?php }?> <form method="post" action="profile" id="Profileform" enctype="multipart/form-data"> @csrf <div class="form-group"> <label class="control-label">Reg Date -</label> {{Auth::user()->RegDate}} </div> <div class="form-group"> <label class="control-label">Last Update at -</label> {{Auth::user()->updated_at}} </div> <div class="form-group"> <label class="control-label">Full Name</label> <input class="form-control white_bg" name="name" value="{{Auth::user()->name}}" id="name" type="text" required> </div> <div class="form-group"> <label class="control-label">Email Address</label> <input class="form-control white_bg" value="{{Auth::user()->email}}" name="email" id="email" type="email" required readonly> </div> <div class="form-group"> <label class="control-label">Phone Number</label> <input class="form-control white_bg" name="phone" value="{{Auth::user()->phone}}" id="phone" type="text" required> </div> <div class="form-group"> <label class="control-label">Date of Birth (dd/mm/yyyy)</label> <input class="form-control white_bg" value="{{Auth::user()->Dob}}" name="Dob" placeholder="dd/mm/yyyy" id="Dob" type="text" required > </div> <div class="form-group"> <label class="control-label">Your Address</label> <textarea class="form-control white_bg" name="address" rows="4" id="address" required>{{Auth::user()->address}}</textarea> </div> <div class="form-group"> <label class="control-label">Country</label> <input class="form-control white_bg" name="country" value="{{Auth::user()->country}}" id="country" type="text" required> </div> <div class="form-group"> <label class="control-label">City</label> <input class="form-control white_bg" name="city" value="{{Auth::user()->city}}" id="city" type="text" required> </div> <div class="form-group"> <button type="submit" name="updateprofile" class="btn">Save Changes <span class="angle_arrow"><i class="fa fa-angle-right" aria-hidden="true"></i></span></button> </div> </form> </div> </div>AJAX
<script> $.ajaxSetup({ headers:{ 'X-CSRF-TOKEN':$('meta[name="csrf-token"]').attr('content') } }); $(function(){ /* UPDATE USER PERSONAL INFO */ $(document).on('click','#change_picture_btn', function(){ $('#user_image').click(); }); $('#user_image').ijaboCropTool({ preview : '.user_picture', setRatio:1, allowedExtensions: ['jpg', 'jpeg','png'], buttonsText:['CROP','QUIT'], buttonsColor:['#30bf7d','#ee5155', -15], processUrl:'{{ route("user.profilepic") }}', // withCSRF:['_token','{{ csrf_token() }}'], onSuccess:function(message, element, status){ alert(message); }, onError:function(message, element, status){ alert(message); } }); }); </script>
【问题讨论】:
-
在执行进一步操作之前,最好使用
$request->hasFile('user_image')检查请求是否具有该文件。 -
@harishdurga 谢谢我必须使用
$request->hasFile('user_image')我已经尝试过使用它,但是上传时出现错误,您能否告诉我该功能的外观。 -
您面临的错误是什么?这个错误是因为使用
$request->hasFile('user_image')吗? -
@harish 正如您在控制器中看到的那样,
$file持有获取user_image的请求,$upload获取请求并将其移动到路径,因此当我使用hasFile时,@ 出现错误987654331@ 那么,如果我使用 if 状态if($request->hasFile('user_image')){.............}我得到一个空白视图页面,我该如何修改函数以免出现错误。 -
无论如何,从您的角度来看,请求中必须存在文件。所以你可以写
if(!$request->hasFile('user_image')){return response()->json(['status' => 0, 'msg' => 'Something went wrong, file is missing.']);}。您可以将它放在$upload变量声明之前。