Невозможно загрузить изображение с помощью адаптивного API для извлечения данных формы. - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь получить изображение из галереи, используя библиотеку response-native-image-crop-picker (https://github.com/ivpusic/react-native-image-crop-picker#readme).

Когда я использую загрузку с функцией response-native API для отправки изображения в виде данных формы в node.js express API, я получаю ответ как:

Неожиданный идентификатор «undefined»

, но когда я не включаю файл изображения в форме-данных я получаю правильный ответ от backend API

// функция выбора изображений из галереи

selectImageFromGallery() {

    ImagePicker.openPicker({
      multiple: true,
      mediaType: 'photo',
    }).then((images) => {

      let imageArray = []
      images.forEach(image => {
        imageArray.push(
          {
            uri: image.path,
            type: image.mime,
            name: image.path.substring(image.path.lastIndexOf('/') + 1, image.path.length)
          }
        )

      });
    
    // finalImage is array of image objects 
      this.setState({
        finalImage: imageArray
      })

    });
  }

// функция отправки изображений

submitSignature() {

    const form = new FormData();

    form.append('status', this.state.status);
    form.append('remark', this.state.remark);
    form.append('reasonCode', this.state.reasonCode);

    this.state.finalImage.forEach(image => {
      form.append("itemImage", image);
    });

    callFormData(updateStatusURL, form)
      .then((response) => {
        var res = JSON.parse(response);
        if (res.status == 200) {
          Snackbar.show({
            text: res.message,
          });
          DeviceEventEmitter.emit('refresh', { isRefresh: true });
        } else if (res.status === 400) {
          AsyncStorage.clear();
          Actions.reset('login');
        }
      })
      .catch((error) => {
        if (error) {
          Snackbar.show({
            text: error
          });
        }
      });
  }

// Функция диспетчера API с API выборки

export async function callFormData(urlStr, params) {

  var token = await getAccessToken()
  let formData = new FormData();
  formData = params;

  return fetch(urlStr, {
    method: 'POST',
    headers: {
      'Authorization': token,
      Accept: 'application/json',
      'Content-Type': 'multipart/form-data',
    },
    body: formData,
  })
    .then(response => response.json())
    .then(responseData => {
      if (responseData) {
        var result = JSON.stringify(responseData);
        return result;
      } else {
        console.log('No Response')
        return null
      }

    })
    .catch(error => {
      if (error.toString().includes(TYPE_NETWORK)) {
        return (
          500,
          Snackbar.show({
            text: error
          })
        );
      } else {
        Snackbar.show({
          text: error
        })
      }
    });
}

Получил работу Добавление следующих строк в gradle.properties

# Version of flipper SDK to use with React Native 
FLIPPER_VERSION=0.33.1
...