Почему это плохая просьба реагировать на родной топор ios поставить запрос - PullRequest
0 голосов
/ 13 февраля 2020

Почему этот запрос плохой, я отправил тот же запрос в почтальоне, используя необработанные данные и заголовок приложений типа контента / json, и он работает. Но в моем запросе ios я получаю неверный запрос

const update = dispatch => {

  return async (name, email, phone, picture, Age, Blood, Gender, Height, Weight, id) => {
    const data = new FormData();

    data.append('name', name);
    data.append('email', email);
    data.append('phone', phone);
    data.append('Age', Age);
    data.append('Blood', Blood);
    data.append('Gender', Gender);
    data.append('Height', Height);
    data.append('Weight', Weight);
    data.append("picture", {
      type: 'image/jpg',
      uri: picture,
      name: 'profilepic.jpg'
    });
    const config = {
      method: 'put',
      url: `http://c256474d.ngrok.io/api/userregister/24`,
      data: data,
      headers: { 'content-type': 'application/json' }

    }


    await axios(config)
    navigate('UserAccount')
  }
}

Это код на стороне сервера, он работает при тестировании с почтальоном. Он не работает при отправке с данными формы, но работает, когда тело является необработанным и заголовок приложения / json

        public function update(Request $request, $id)
      {
       // dd($request->all());
        $validator = Validator::make($request->all(), [
        'name' => 'required|string|max:255',
        'email' => 'string|email|max:255',
        'phone' => 'string|min:6',
        'Age' => 'string',
        'Blood' => 'string',
        'Gender' => 'string',
        'Height' => 'string',
        'Weight' => 'string',
        'record' => 'string'
    ]);

    if($validator->fails()){
            return response()->json($validator->errors()->toJson(), 400);
    }

    $doc = User::find($id);

    if($request->hasFile('picture')){
        // Get filename with the extension
        $filenameWithExt = $request->file('picture')->getClientOriginalName();
        // Get just filename
        $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
        // Get just ext
        $extension = $request->file('picture')->getClientOriginalExtension();
        // Filename to store
        $fileNameToStore= $filename.'_'.time().'.'.$extension;
        // Upload Image
        $path = $request->file('picture')->storeAs('public/images', $fileNameToStore);
    } else {
        $fileNameToStore = 'noimage.jpg';
    }

    $doc->name = $request->input('name');
      $doc->email = $request->input('email');
      $doc->phone = $request->input('phone');
      if($request->hasFile('picture')){
        $doc->picture = $fileNameToStore;
        }



       $doc->save();

    return response()->json([
        'message' => 'Success',

    ]);

}

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Измените заголовок на

{ headers: { 'Content-Type': 'multipart/form-data' } }

Вы не отправляете JSON Данные.

0 голосов
/ 13 февраля 2020

Мы не можем знать , почему сервер считает данные плохими, потому что вы не передали серверный код, который делает это определение.

Это довольно разумная ставка на то, что включение 'content-type': 'application/json' в заголовки и затем не отправка JSON в теле не помогает, хотя.

FormData объекты используются для генерации multipart/form-data тел запроса, а не application/json.

Если вы хотите отправить JSON, вам нужно сгенерировать JSON:

const data = {
  name: name,
  email: email,
  phone: phone,
  Age: Age,
  Blood: Blood,
  Gender: Gender,
  Height: Height,
  Weight: Weight,
  picture: {
    type: "image/jpg",
    uri: picture,
    name: "profilepic.jpg"
  }
};
const config = {
  method: "put",
  url: `http://c256474d.ngrok.io/api/userregister/24`,
  data: JSON.stringify(data),
  headers: { "content-type": "application/json" }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...