Как я могу отформатировать структуру моего объекта formData, чтобы соответствовать тому, что ожидает серверная часть? - PullRequest
0 голосов
/ 30 марта 2019

Я использую formData для отправки изображения, загруженного с помощью ImagePicker.Я отправляю параметры следующим образом:

  let formData = new FormData();

  formData.append('image', { uri: localUri, name: filename, type });
  formData.append('description', 'this is the decription');

  return await fetch('https://prana-app.herokuapp.com/v1/visions/', {
    method: 'POST',
    body: formData,
    header: {
      'Accept': 'application/json',
      'Content-Type': 'application/json',
      'X-User-Email': this.state.email,
      'X-User-Token': this.state.accessToken
    },
  });
  };

Это не похоже на работу, так как я получаю очень общий NoMethodError (undefined method build 'для nil: NilClass): `error.

Как правильно разместить свои параметры POST, если параметр image является изображением, а параметр description является строкой?

Спасибо

1 Ответ

0 голосов
/ 30 марта 2019

Content-Type должен отличаться при использовании Formdata.

example.js:

fileSend = () => {
    const apiUrl = "http://00.000.00.000:0000/upload";
    const uri = this.state.image;
    const stringdata = {
      username: this.state.name,
      introduce: this.state.introducetext,
      addresstext: this.state.addresstext
    };
    const uriParts = uri.split(".");
    const fileType = uriParts[uriParts.length - 1];
    const formData = new FormData();

    formData.append("userfile", {
      uri,
      name: `photo.${fileType}`,
      type: `image/${fileType}`
    });
    for (var k in stringdata) {
      formData.append(k, stringdata[k]);
    }

    const options = {
      method: "POST",
      body: formData,

      headers: {
        Accept: "application/json",
        "Content-Type": "multipart/form-data"
      }
    };

    return fetch(apiUrl, options)

Как показано в примере выше, Content-Type должен записать multipart/form-data и передать егодо For ... in, если Stringdata не один.

...