Axios: Axios не отправляет данные формы в react-native

Созданный на 25 янв. 2018  ·  46Комментарии  ·  Источник: axios/axios

Я пытаюсь отправить данные формы с помощью axios, но не могу, в инструментах chrome dev в запросе не отображается контент. Если сделать тот же запрос через почтальона, API ответит нормально.
js (newData) => { const data = new FormData(); data.append('name', 'raphael'); data.append('file', { uri: newData.image.path, type: 'image/jpeg', name: 'teste' }); return axios.post(`${constants.development.URL_API}/file`, data, headers: { 'Content-Type': 'multipart/form-data', }, })`

Самый полезный комментарий

Эта ошибка все еще возникает с последними версиями Axios, почему она была закрыта?

Все 46 Комментарий

@corujoraphael Из любопытства, этот запрос работал раньше?

@corujoraphael Я не уверен, что ваш код работает как есть. Конфигурация, в которой вы указываете заголовки, должна быть объектом, но в ней отсутствует фигурная скобка:

(newData) => {
  const data = new FormData();
  data.append('name', 'raphael');
  data.append('file', {
    uri: newData.image.path,
    type: 'image/jpeg',
    name: 'teste'
  });

  return axios.post(
    `${constants.development.URL_API}/file`,
    data, 
    { 
      headers: {
        'Content-Type': 'multipart/form-data',
      }
    },
  )
}

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

Если вам нужна дополнительная помощь в отладке кода, опубликуйте сообщение на Stack Overflow , Gitter или еще раз прокомментируйте эту проблему.

Спасибо!

@emilyemorehouse , я столкнулся с той же проблемой, используя React Native FormData

let s = JSON.stringify({ uri: localUri, name: filename, type: type });
let formData = new FormData();
formData.append('ph0t0', s);

axios.post("http://10.0.1.2:8888/uploadphoto", {
        method: "POST",
        headers: {
                'Content-Type': 'multipart/form-data; charset=utf-8; boundary="another cool boundary";'
        },
        body: formData,
}).then((resp) => {
        console.log(resp);
}).catch(err => {
        console.log(err);
});

Ожидайте, что пары ключ: значение существуют в MultipartForm, Form или PostForm

2018/02/20 18: 25: 31.740 [W] [photo.go: 411] req.MultipartForm: nil
2018/02/20 18: 25: 31.740 [W] [photo.go: 412] req.Form: map []
2018/02/20 18: 25: 31.740 [Вт] [photo.go: 413] треб.
2018/02/20 18: 25: 31.740 [W] [photo.go: 410] req: & {POST / uploadphoto / dialog / 57120e8951c643ab42a8c19f / 000000000000000000000001 HTTP / 1.1 1 1 карта [Content-Type: [application / json; charset = utf-8] User-Agent: [okhttp / 3.6.0] Accept: [application / json, text / plain, / ] Content-Length: [419] Connection: [Keep-Alive] Accept-Encoding: [gzip] Cookie: [lang = zh-TW; PVsessionID = db9a21d63b2d0ea47b68fa8755bd87e2]] 0xc420e3cb80419 [] ложь 10.0.1.2:8888 карта [] карта []карта [] 10.0.1.3:46904 / uploadphoto / dialog / 57120e8951c643ab42a8c19f / 0000000000000000000000010xc420e3cb40}
2018/02/20 18: 25: 31.740 [E] [photo.go: 425] [UploadPhotos] ошибка: запрос Content-Type не является multipart / form-data

Информация о версии
аксиомы: 0,16,2
экспо: 25.0.0
реагировать: 16.2.0
реагировать-родной: 0.52.0

Эта ошибка все еще возникает с последними версиями Axios, почему она была закрыта?

Если кто-то может предоставить воспроизводимый пример, я буду рад открыть эту резервную копию.

@ Ernie6711 похоже, что у вас есть ошибка в вашем коде - я не думаю, что вам следует структурировать данные файла, прежде чем добавлять их в данные формы. Также аргументы для axios.post: axios.post(url[, data[, config]])

Вот пример, основанный на вашем коде:

const file ={ uri: localUri, name: filename, type: type};
const formData = new FormData();
formData.append('file', s);

const config = {
        headers: {
                'Content-Type': 'multipart/form-data; charset=utf-8; boundary="another cool boundary";'
        }
};

axios.post("http://10.0.1.2:8888/uploadphoto", formData, config).then((resp) => {
        console.log(resp);
}).catch(err => {
        console.log(err);
});

@emilyemorehouse, пожалуйста, проверьте следы

POST /myserver HTTP/1.1
Content-Type: multipart/form-data

_parts=USERX%2Cusername&_parts=FILE1%2C%5Bobject%20Object%5D

У меня есть пример локального клиента и сервера для загрузки файлов, хотя и за пределами среды React Native, который работает и правильно закодирован. Приведенный выше пример на самом деле не воспроизводится, поскольку он основан на переменных и сервере, к которому у меня нет доступа.

Я предполагаю, что если что-то не так с загрузкой, это потому, что данные, добавленные к объекту данных формы, недействительны.

@emilyemorehouse Загрузка файлов отлично работает в среде браузера, они терпят неудачу только при реагировании на native. Как вы сами упомянули - ваши тесты были вне среды react native, я бы начал с нее :)

Попробуйте простую загрузку файла в react native и просто проверьте следы wirehark, вам даже не нужен рабочий сервер ...

У меня то же самое, Axios не реагирует на родной

@duongtranpyco Я удалил аксиомы из своего проекта, вместо этого я написал свой собственный простой класс, наслаждайтесь!

PS Если вы в основном отправляете JSON, измените код. В моем случае сервер обычно ожидает формы.

const request = async ({url, method = 'GET', params, body, responseType = 'json', headers = {}})=>{
    const escape = (data, encode = encodeURIComponent)=>Object.keys(data||{}).reduce((pairs, key)=>{
        for (let value of [].concat(data[key]))
            pairs.push([`${key}`, `${value}`]);
        return pairs;
    }, []).map(pair=>pair.map(encode).join('=')).join('&');

    if (Object.keys(params||{}).length)
        url += '?'+escape(params);
    if (method=='POST' && typeof body=='object')
    {
        if (body instanceof FormData)
            headers['Content-Type'] = 'multipart/form-data';
        else
        {
            body = escape(body);
            headers['Content-Type'] = 'application/x-www-form-urlencoded';
        }
    }
    let {statusCode, request: req} = await new Promise((resolve, reject)=>{
        let xhr = new XMLHttpRequest();
        xhr.open(method, url, true);
        xhr.withCredentials = true;
        xhr.responseType = {json: 'text'}[responseType]||responseType;
        xhr.onload = ()=>resolve({statusCode: xhr.status, request: xhr});
        xhr.onerror = ()=>reject(new TypeError('Network request failed'));
        xhr.ontimeout = ()=>reject(new TypeError('Network request timed out'));
        for (let key in headers)
            xhr.setRequestHeader(key, headers[key]);
        xhr.send(body||null);
    });
    if (statusCode<200 || statusCode>=400)
        throw new Error(`network request failed with ${statusCode}: ${url}`);
    switch(responseType)
    {
        case 'json':
            return JSON.parse(req.responseText);
        case 'text':
            return req.responseText;
        case 'request':
            return req;
    }
    return req.response;
};

request.get = (url, opt = {})=>request({...opt, url, body: null});
request.post = (url, ...args)=>request({...args[1]||{}, url, method: 'POST', body: args[0]});

Привет, у меня такая же проблема. Кто-нибудь нашел решение?

Второй @giladno. Поскольку я перехожу к другим частям, вместо этого я использую обходной путь: напишите конкретную функцию с помощью fetch () при загрузке изображений.

Пробовал раньше, и ни строковая обработка данных, ни аргументов не влияет на результат. Сервер получил вызов, но данные не отправлены.

@ Ernie6711 очевидно, что заголовки повреждены, и поэтому сервер не может принять данные формы. Я реализовал обходной путь с помощью fetch (), и он работал без проблем.

У меня была проблема с реакцией.
Проблема не в заголовках.
В сети мы можем иметь, например:

let formData = new FormData()
formData.append('key', true // bool value)

но в React Native значение ключа должно быть строкой.

formData.append('key', 'true')

У меня такая же проблема с реагированием на родной язык, когда я отправляю сообщение по URL-адресу, как упоминает @giladno , вы должны протестировать реагировать на родной язык, и вы можете проверить ошибку, о которой люди сообщают @emilyemorehouse. Я сообщаю об ошибке 14 дней назад https://github.com/axios/axios/issues/1618 , но никто не ответил, пожалуйста, опишите в файле readme вашей библиотеки, что у вас нет поддержки axios при реагировании на native, чтобы многие разработчики не теряют времени зря ..!

Да, я ценю направление, но «просто протестируйте загрузку файла в React Native» не так-то просто. Я не часто работаю с React Native, и на запуск проекта с загрузкой файлов для тестирования потребуется приличное количество времени.

У меня есть простой POST с данными формы, который работает в React Native:

    const formData = new FormData();
    formData.append("data", true);

    const config = {
      headers: {
        "Content-Type": "multipart/form-data; charset=utf-8;"
      }
    };

    axios.post(URL, formData, config).then(
      response => {
        console.log({ response });
      },
      error => {
        console.log({ error });
      }
    );

true получает строку при отправке на сервер, что интересно.

Тем не менее, если кто-нибудь может предоставить пример, который я могу легко развернуть, я буду рад изучить его подробнее.

@corujoraphael, как вы это решили?

Я добавил тип внутри объекта изображения, например "Image.type='image/png" непосредственно перед добавлением, а также изменил тип содержимого на "Content-Type":"multipart/form-data" :

        image.type='image/png'
        formData.append("resource", image);
        return axios
          .post('yourBAckendUrl', formData, {
            headers: {
              Authorization: "yourTokenHere",
              "Content-Type": "multipart/form-data"
            }
          })

Надеюсь, это кому-то поможет.

Мне тоже не удалось заставить это работать, я пытаюсь PUT multipart / form-data в S3 (видео). Использование опции типа не помогло. Заголовок multipart / form-data, похоже, отсутствует в запросе PUT:

      const data = new FormData();
      data.append('video', {
          uri: 'file:///<path_to_video_on_iphone.mov',
          type: 'video/quicktime',
          name: 'video.mov',
      });
      response = yield call(() => {
        return api.put(url, data, {
          headers: {
              'Content-Type': 'multipart/form-data',
          },
          transformRequest: [
            (data, headers) => {
                delete headers.common.Authorization;
                return data;
            }
          ]
        });
      });

В этом случае используйте выборку: D

var data = new FormData();  
data.append('my_photo', {  
  uri: filePath, // your file path string
  name: 'my_photo.jpg',
  type: 'image/jpg'
}

fetch(path, {  
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'multipart/form-data'
  },
  method: 'POST',
  body: data
});

в версии axios 0.18.0 имеет ту же проблему.
axios внутренне удаляет заголовок Content-Type если в post, put т. д. по какой-то причине нет тела, при создании FormData тело остается пустым ..
это мой код:

const sendFormData = images => {
   // images is an array of base64 images (strings)
    const formData = new FormData();
    images.forEach((img, i) => {
        formData.append('file', img);
        formData.append('name', `${type}-${i + 1}`);
    });

    config.headers = {
        .'Content-Type': 'multipart/form-data'
     };

     return axios.post(`http://someurl.com/api/upload-images`, formData, config)
            .then(response => {
               // handle success
            })
            .catch(err => {
                // handle err
     });
}

React Native версия 0.55.3
этот пример кода не работает. тело запроса пусто, а заголовок Content-Type удален

У меня такие же проблемы, и мое тело, когда я проверяю отладку, является строкой

screen shot 2018-10-26 at 11 12 10 am

и вот мой код

        const formData = new FormData();
        formData.append('photo', {
          uri: response.uri.replace('file://', ''),
          mineType: 'image/jpeg',
          fileType: 'image/jpg',
          type: 'image/jpg',
          name: 'test.jpg'
        });

        console.log('form data', formData);

         Axios({
           method: 'post',
           url: 'https://dev-host.luxstay.net/api/rooms/10740/photos',
           data: formData,
           headers: {
             Authorization: token,
             'Content-Type': 'multipart/form-data'
           }
         });

Обновление: произошла ошибка, потому что приложение находилось в режиме отладки. Когда я выключил режим отладки, он работал

У axios есть код в адаптере xhr
if (utils.isFormData(requestData)) { delete requestHeaders['Content-Type']; // Let the browser set it }
Я предполагаю, что в react-native он удаляет заголовок типа содержимого, если вы отправляете данные многостраничной формы, даже если вы устанавливаете его в коде.
Но я не уверен, что комментирование строки решит вашу проблему в react-native.

в версии axios 0.18.0 имеет ту же проблему.
axios внутренне удаляет заголовок Content-Type если в post, put т. д. по какой-то причине нет тела, при создании FormData тело остается пустым ..
это мой код:

const sendFormData = images => {
   // images is an array of base64 images (strings)
    const formData = new FormData();
    images.forEach((img, i) => {
        formData.append('file', img);
        formData.append('name', `${type}-${i + 1}`);
    });

    config.headers = {
        .'Content-Type': 'multipart/form-data'
     };

     return axios.post(`http://someurl.com/api/upload-images`, formData, config)
            .then(response => {
               // handle success
            })
            .catch(err => {
                // handle err
     });
}

React Native версия 0.55.3
этот пример кода не работает. тело запроса пусто, а заголовок Content-Type удален

screen shot 2018-10-26 at 11 12 10 am

Так как же это должно выглядеть? У меня тоже есть объект-объект.

@tkserver выглядит так, когда у вас есть объект, а затем вы его toString ().

const a = {
  name: 'dasdasd'
}
console.log(a.toString());

@tkserver выглядит так, когда у вас есть объект, а затем вы его toString ().

const a = {
  name: 'dasdasd'
}
console.log(a.toString());

Возможно, я не понял. Должны ли данные запроса отображать [объект объекта] при просмотре заголовков?

@tkserver, если в вашем отладчике включен сетевой осмотр, он переопределит FormData от react-native и приведет к передаче пустого объекта FormData, который будет выглядеть как [Object object] при проверке сети.
Попробуйте сделать запрос с отключением проверки сети, надеюсь, это поможет.

Спасибо Aman725, minhphung210 и всем остальным. Когда я использую код на реальном устройстве, загрузка работает правильно. Казалось бы, это связано с симулятором iOS.

У меня была эта проблема, но теперь она исправлена.

Причина в том, что я отлаживал сетевые запросы. У меня была эта строка кода в точке входа моего приложения:

GLOBAL.XMLHttpRequest = GLOBAL.originalXMLHttpRequest || GLOBAL.XMLHttpRequest;

Я прокомментировал это, и теперь он работает.

// IMPORTANT: this will cause FormData requests to fail.
// GLOBAL.XMLHttpRequest = GLOBAL.originalXMLHttpRequest || GLOBAL.XMLHttpRequest;

Я только что нашел это: https://stackoverflow.com/a/47630754/387912 , это помогает?

XMLHttpRequest

Можете ли вы рассказать мне, как вы создали запрос, чтобы он правильно загружался как многосторонний? Я получаю сообщение об ошибке сети:

Error: Network Error
    at createError (blob:http://localhost:8081/0754d453-361d-48d1-aaa5-9ff1ad808293:168963:17)
    at XMLHttpRequest.handleError (blob:http://localhost:8081/0754d453-361d-48d1-aaa5-9ff1ad808293:168871:16)
    at XMLHttpRequest.dispatchEvent (blob:http://localhost:8081/0754d453-361d-48d1-aaa5-9ff1ad808293:28708:27)
    at XMLHttpRequest.setReadyState (blob:http://localhost:8081/0754d453-361d-48d1-aaa5-9ff1ad808293:28461:20)
    at XMLHttpRequest.__didCompleteResponse (blob:http://localhost:8081/0754d453-361d-48d1-aaa5-9ff1ad808293:28288:16)
    at blob:http://localhost:8081/0754d453-361d-48d1-aaa5-9ff1ad808293:28398:47
    at RCTDeviceEventEmitter.emit (blob:http://localhost:8081/0754d453-361d-48d1-aaa5-9ff1ad808293:3291:37)
    at MessageQueue.__callFunction (blob:http://localhost:8081/0754d453-361d-48d1-aaa5-9ff1ad808293:2588:44)
    at blob:http://localhost:8081/0754d453-361d-48d1-aaa5-9ff1ad808293:2345:17
    at MessageQueue.__guard (blob:http://localhost:8081/0754d453-361d-48d1-aaa5-9ff1ad808293:2542:13)

ОБНОВЛЕНИЕ: удалось заставить его работать сейчас. В настоящее время используется:

formData.append('picture', {
          uri: data.uri,
          name: fname,
          type: 'image/' + ext

        });

Если люди все еще сталкиваются с этой проблемой, а у вас
GLOBAL.XMLHttpRequest = GLOBAL.originalXMLHttpRequest || GLOBAL.XMLHttpRequest;
фрагмент для отладки сетевых запросов, попробуйте добавить
GLOBAL.FormData = GLOBAL.originalFormData || GLOBAL.FormData
у меня это сработало.

Я добавил тип внутри объекта изображения, например "Image.type='image/png" непосредственно перед добавлением, а также изменил тип содержимого на "Content-Type":"multipart/form-data" :

        image.type='image/png'
        formData.append("resource", image);
        return axios
          .post('yourBAckendUrl', formData, {
            headers: {
              Authorization: "yourTokenHere",
              "Content-Type": "multipart/form-data"
            }
          })

Надеюсь, это кому-то поможет.

Спасибо за вашу помощь! Я смог загрузить свою фотографию с помощью iOS Simunator, но не с помощью Android.

После того, как я установил тип изображения на «image / jpeg», у меня прекратилась сетевая ошибка.

const formData = new FormData();
formData.append('file', {
  uri: pictureUri,
  type: 'image/jpeg',
  name: 'profile-picture'
})

Я добавил тип внутри объекта изображения, например "Image.type='image/png" непосредственно перед добавлением, а также изменил тип содержимого на "Content-Type":"multipart/form-data" :

        image.type='image/png'
        formData.append("resource", image);
        return axios
          .post('yourBAckendUrl', formData, {
            headers: {
              Authorization: "yourTokenHere",
              "Content-Type": "multipart/form-data"
            }
          })

Надеюсь, это кому-то поможет.

Спасибо за вашу помощь! Я смог загрузить свою фотографию с помощью iOS Simunator, но не с помощью Android.

После того, как я установил тип изображения на «image / jpeg», у меня прекратилась сетевая ошибка.

const formData = new FormData();
formData.append('file', {
  uri: pictureUri,
  type: 'image/jpeg',
  name: 'profile-picture'
})

Для тех, кому это может помочь, если вы не знаете тип содержимого, которое будет отправлено, используйте multipart/form-data . Сейчас это кажется очевидным, но мне потребовался добрый час, чтобы заставить работать любые средства массовой информации.

    data.append("image", {
      name: "some_name", // also, won't work without this. A name is required
      height: image.height,
      width: image.width,
      type: "multipart/form-data", // <-- this part here
      uri:
        Platform.OS === "android" ? image.uri : image.uri.replace("file:/", "")
    });

Привет, я пытаюсь загрузить файл Axios в Vue.Js. Может ли кто-нибудь рассмотреть и объяснить проблему?

В HTML
<input type="file" id="file" ref="file" multiple @change="assignFiles"/>

В Js

`assignFiles (e) {

      let uploadedFiles = this.$refs.file.files;
      for( var i = 0; i < uploadedFiles.length; i++ ) { 
        this.form.AttachmentDocs.push(uploadedFiles[i]);           
      }
      console.log(this.form.AttachmentDocs);
 },`

Итак, при запуске публикации я добавляю данные формы.

`continueSave (e) {

      e.preventDefault();
      this.$v.$touch();
      if(this.$v.$invalid) {
        return;
      }
    this.showLoading(this.loaderId,true);
      this.postDatas.append('form',JSON.stringify(this.form));
      for( var i = 0; i < this.form.AttachmentDocs.length; i++ ){ 
        let attachment = this.form.AttachmentDocs[i];
        this.postDatas.append('files['+i+']',attachment,attachment.name);           
      }

} `

Итак, в сообщении я проверил заголовок окна консоли, там он показывает

файлы [0]: (двоичный)
файлы [1]: (двоичный)
файлы [2]: (двоичный)
файлы [3]: (двоичный)

На стороне моего сервера я не могу получить файлы.

Может иметь какое-то отношение к

this.postDatas.append('files['+i+']',attachment,attachment.name);  

Попробуйте files['+' + i + '+']

У меня такая же проблема с fetch api. req.body был пуст в узле js. Использование слова «экспресс-грозный» решило проблему. https://www.npmjs.com/package/express-formidable

Может иметь какое-то отношение к

this.postDatas.append('files['+i+']',attachment,attachment.name);  

Попробуйте files['+' + i + '+']

Sry + указывает конкатенацию, ват - использование строки '+'. Результатом будут файлы [+0+]

У меня такая же проблема с fetch api. req.body был пуст в узле js. Использование слова «экспресс-грозный» решило проблему. https://www.npmjs.com/package/express-formidable

Вы включили app.use(express.json({ extended: false })); ?

Может иметь какое-то отношение к

this.postDatas.append('files['+i+']',attachment,attachment.name);  

Попробуйте files['+' + i + '+']

Sry + указывает конкатенацию, ват - использование строки '+'. Результатом будут файлы [+0+]

Ваш текущий код всегда будет приводить к files[+i+] в вашем цикле for. Это никогда не будет files[+0+], files[+1+], files[+2+], etc .

Кроме того, files[+0+] никогда не будет существовать. Не уверен, что вы пытаетесь сделать. Вам нужно files[0], files[1], files[2]... ? Если вы пытаетесь построить объект, у вас может быть files['+0+'] , но, опять же, я не уверен, чего вы пытаетесь достичь.

У меня такая же проблема с fetch api. req.body был пуст в узле js. Использование слова «экспресс-грозный» решило проблему. https://www.npmjs.com/package/express-formidable

Вы включили app.use(express.json({ extended: false })); ?
Нет. Однако в грозном у меня есть одна проблема. Загруженное изображение будет занимать все необходимые поля. В файлах запроса ничего нет. Не уверен, почему это происходит.

@duongtranpyco Я удалил аксиомы из своего проекта, вместо этого я написал свой собственный простой класс, наслаждайтесь!

PS Если вы в основном отправляете JSON, измените код. В моем случае сервер обычно ожидает формы.

const request = async ({url, method = 'GET', params, body, responseType = 'json', headers = {}})=>{
    const escape = (data, encode = encodeURIComponent)=>Object.keys(data||{}).reduce((pairs, key)=>{
        for (let value of [].concat(data[key]))
            pairs.push([`${key}`, `${value}`]);
        return pairs;
    }, []).map(pair=>pair.map(encode).join('=')).join('&');

    if (Object.keys(params||{}).length)
        url += '?'+escape(params);
    if (method=='POST' && typeof body=='object')
    {
        if (body instanceof FormData)
            headers['Content-Type'] = 'multipart/form-data';
        else
        {
            body = escape(body);
            headers['Content-Type'] = 'application/x-www-form-urlencoded';
        }
    }
    let {statusCode, request: req} = await new Promise((resolve, reject)=>{
        let xhr = new XMLHttpRequest();
        xhr.open(method, url, true);
        xhr.withCredentials = true;
        xhr.responseType = {json: 'text'}[responseType]||responseType;
        xhr.onload = ()=>resolve({statusCode: xhr.status, request: xhr});
        xhr.onerror = ()=>reject(new TypeError('Network request failed'));
        xhr.ontimeout = ()=>reject(new TypeError('Network request timed out'));
        for (let key in headers)
            xhr.setRequestHeader(key, headers[key]);
        xhr.send(body||null);
    });
    if (statusCode<200 || statusCode>=400)
        throw new Error(`network request failed with ${statusCode}: ${url}`);
    switch(responseType)
    {
        case 'json':
            return JSON.parse(req.responseText);
        case 'text':
            return req.responseText;
        case 'request':
            return req;
    }
    return req.response;
};

request.get = (url, opt = {})=>request({...opt, url, body: null});
request.post = (url, ...args)=>request({...args[1]||{}, url, method: 'POST', body: args[0]});

Я использую этот код в своем проекте. Я пытаюсь понять этот код. Один вопрос, нужна ли эта строка,
for (пусть значение [] .concat (data [key]))? Это можно написать просто,
pair.push ([ ${key} , ${data[key]} ]);

Если люди все еще сталкиваются с этой проблемой, а у вас
GLOBAL.XMLHttpRequest = GLOBAL.originalXMLHttpRequest || GLOBAL.XMLHttpRequest;
фрагмент для отладки сетевых запросов, попробуйте добавить
GLOBAL.FormData = GLOBAL.originalFormData || GLOBAL.FormData
у меня это сработало.

Где это?

У меня тоже была проблема. Это вызвано путем к файлу в android.
const путь = utils.isAndroid ()?
И он работает нормально с реализацией следующего

    const formData = new FormData();
    const path = utils.isAndroid() ? `file://${filePath}` : filePath;
    formData.append('Voice', {
      uri: path,
      name: 'test',
      type: 'audio/wav',
    });

    formData.append('Content-Type', 'audio/wav');
     const headers =  {
        'Content-Type': 'multipart/form-data',
      };
    return this._sendRequest(url, 'POST', formData, headers);
 data.append('file', {
    uri: newData.image.path,
    type: 'image/jpeg',
    name: 'teste'

Используйте имя типа: name:'teste.jpeg' и оно будет работать. вам нужно указать формат файла, иначе он не будет работать.
Я исправил это, указав имя: 'example.jpeg'

После нескольких дней попыток загрузить видео с помощью Axios я просто сдаюсь. RNFetchBlob - лучший вариант для загрузки файлов, особенно с Android. Этот раздел легко реализовать

rn-fetch-blob

Была ли эта страница полезной?
0 / 5 - 0 рейтинги