2017-02-02 2 views
0

Я использую интервенцию для функции загрузки изображений, но когда я пытаюсь загрузить изображение из почтальона с заголовком «content-type: multipart/form-data», он отображается выше ошибки, но если я удалю заголовок типа контента, тогда он работает нормально. Я добавил изображения почтальона. Postman header with request **Postman image upload** Ошибка «Вызов функции-члена getClientOriginalExtension() on null» в laravel 5.3?

мой маршрут

Route :: пост ('контакт/изображение/загрузки', [ 'а' => 'intervention.postresizeimage', 'использует' => 'contactController @ загрузить изображение']);

код в контроллере

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; 

    } 
+0

Ваша фотография еще не загружена. попробуйте использовать это $ photo [0] вместо фотографии – Vikash

+0

Где я должен это изменить? – SaMeEr

+0

Попробуйте распечатать переменную $ photo и проверить значение. Также проверьте свою форму, она должна быть enctype = "multipart/form-data". – shafiq

ответ

1

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

А также в вас HTML форма добавить этот

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

или если вы используете Laravel коллектив затем добавить 'files'=> true в форме

и я обновил свой код, чтобы сделать то проверить, если файл присутствует при температуре ниже

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; 

}

+0

Хорошо. но как насчет устройств Android и ios, которые запрашивают мой api и пытаются загрузить файл. как они меняют формат запроса? – SaMeEr

+0

Поскольку они всегда устанавливают RequestHeader с типом контента: multipart/form-data. – SaMeEr

+0

@SaMeEr тогда он будет работать как ожидалось – msonowal

Смежные вопросы