Большой двоичный объект не работает правильно в React Native

#javascript #react-native

#javascript #react-native

Вопрос:

Я пишу код в react для отправки данных JSON с файлом на серверный сервер, и это выглядит нормально, но когда я отправляю те же данные в React Native, возникает исключение данных из составных форм.

Вот код, который я пробовал на стороне React, и он работает правильно:

   const incident = {
    'incidentDateTime': '05-Apr-2019 12:39',
    'description': 'desc',
    'actionTaken': 'Action Taken',
    'additionalInformation': '',
    'incidentTypeId': 1,
    'communityId': 1,
    'reporterId': 2,
    'reporterName': 'test user'
  }

  formData.append('incident', new Blob([JSON.stringify(incident)], {
      type: 'application/json'
    })
  )


  const instance = axios.create({
    baseURL: 'http://18.XXX.XX.XXX:80XX/api/',
    headers: { 'x-authorization': 'Bearer XXXXXXXX' }
  })

  instance.post('incidents', formData)
  

Он работает нормально, но если я отправлю данные по этому же шаблону в React Native.Сервер выдаст исключение, что нет данных формы из нескольких частей.
Я попробовал использовать пакет react-native-fetch-blob. Далее следует код через react-native-fetch-blob

   import RNFetchBlob from 'react-native-fetch-blob'


  const BlobRN = RNFetchBlob.polyfill.Blob
  const formData = new FormData()

    const incident = {
      // 'id': 0,
      'incidentDateTime': '05-Apr-2019 12:39',
      'description': 'desc',
      'actionTaken': 'Action Taken',
      'additionalInformation': '',
      'incidentTypeId': 1,
      'communityId': 1,
      'reporterId': 2,
      'reporterName': 'test user'
    }


    const blobAttrs = { type: 'application/json' }
    const blobPromise = BlobRN.build(incident, blobAttrs)

    blobPromise.then(blobInstance => {

      formData.append('incident', {
        uri: fileInstance._ref,
        type: fileInstance.type,
        name: fileInstance.name
      })

      const instance = axios.create({
        baseURL: 'http://18.XXX.XX.XX:80XX/api/',
        headers: { 'x-authorization': 'Bearer XXXX' }
      })

      instance.post('incidents', formData)
    })
  

Вот снимок запроса при попытке с помощью react-native-fetch-blob

Комментарии:

1. У них есть пример прямо здесь . Вы пробовали использовать RNFetchBlob.fetch() вместо axios? Axios может не знать, что делать с полизаполнением для большого двоичного объекта.

2. Ну, это не родной Blob. Не удивлен, что FormData не знает, как с этим справиться, но очень удивлен, что он не отображается как «[object Object]». Но почему вы отправляете свои данные JSON в виде файла? Вы не выиграете больше, чем если бы отправили его как часть form-data ( formData.append('incident', JSON.stringify(incident)) )