Search code examples
laravellaravel-5laravel-5.3postmanintervention

Error "Call to a member function getClientOriginalExtension() on null" in laravel 5.3?


I am using intervention for image upload functionality but when I am trying to upload image from postman with "content-type: multipart/form-data" in header, it shows up above error, but if I remove content-type header then it is working fine. I have added images of postman . Postman header with request **Postman image upload**

my route

Route::post('contact/image/upload',['as'=>'intervention.postresizeimage','uses'=>'contactController@upload_image']);

code in controller

public function upload_image(Request $request){

      if((preg_match("/^[789]\d{9}$/", $request->header('UID')))){

        $photo = $request->file('image');
        $imagename = time().'.'.$photo->getClientOriginalExtension(); 

        $destinationPath_thumb = storage_path('images/thumbnail_images');
        $thumb_img = Image::make($photo->getRealPath())->resize(100, 100);
        $thumb_img->save($destinationPath_thumb.'/'.$imagename,80);

        $destinationPath_medium = storage_path('images/medium_images');
        $medium_img = Image::make($photo->getRealPath())->resize(500, 500);
        $medium_img->save($destinationPath_medium.'/'.$imagename,80);

        $destinationPath_original = storage_path('images/original_images');
        $photo->move($destinationPath_original, $imagename);

        $user = \App\User::select(['inst_id'])->where('mobile','=',$request->header('UID'))->first();

        $update_img = \App\Contact::where([['id','=',$request->ID],['inst_id','=',$user->inst_id]])->update(['image'=>$imagename]);

        if($update_img)
          $response = response()->json(['data'=>[], 'error'=>0,  'error_msg'=>'', 'message'=>'Profile updated']);
        else
          $response = response()->json(['data'=>[], 'error'=>1,  'error_msg'=>'some went wrong', 'message'=>'Please try again']);
      }
      else
         $response = response()->json(['data'=>[], 'error'=>1,  'error_msg'=>'wrong mobile in UID header','message'=>'wrong mobile no. in header']);

    return  $response;

  }

Solution

  • File is missing in your input so it is becoming null, so it is advised to check if there is file on input request and continue else return error.

    And also in you HTML form add this

    <form enctype="multipart/form-data">
    

    or if you are using laravel collective then add 'files'=> true in Form

    and I have updated your code to do the checking if file is present at below

    public function upload_image(Request $request){
    
      if((preg_match("/^[789]\d{9}$/", $request->header('UID')))){
    
        if(!$request->hasFile('image')) {
    
          return response()->json(['data'=>[], 'error'=>1,  'error_msg'=>'image file is required', 'message'=>'image file is required for upload']);
        }
    
        $photo = $request->file('image');
        $imagename = time().'.'.$photo->getClientOriginalExtension(); 
    
        $destinationPath_thumb = storage_path('images/thumbnail_images');
        $thumb_img = Image::make($photo->getRealPath())->resize(100, 100);
        $thumb_img->save($destinationPath_thumb.'/'.$imagename,80);
    
        $destinationPath_medium = storage_path('images/medium_images');
        $medium_img = Image::make($photo->getRealPath())->resize(500, 500);
        $medium_img->save($destinationPath_medium.'/'.$imagename,80);
    
        $destinationPath_original = storage_path('images/original_images');
        $photo->move($destinationPath_original, $imagename);
    
        $user = \App\User::select(['inst_id'])->where('mobile','=',$request->header('UID'))->first();
    
        $update_img = \App\Contact::where([['id','=',$request->ID],['inst_id','=',$user->inst_id]])->update(['image'=>$imagename]);
    
        if($update_img)
          $response = response()->json(['data'=>[], 'error'=>0,  'error_msg'=>'', 'message'=>'Profile updated']);
        else
          $response = response()->json(['data'=>[], 'error'=>1,  'error_msg'=>'some went wrong', 'message'=>'Please try again']);
      }
      else
         $response = response()->json(['data'=>[], 'error'=>1,  'error_msg'=>'wrong mobile in UID header','message'=>'wrong mobile no. in header']);
    
    return  $response;
    

    }