React-native: React Native 0.62.* [TypeError: Ошибка сетевого запроса] при загрузке файла

Созданный на 6 апр. 2020  ·  263Комментарии  ·  Источник: facebook/react-native

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

Описание

После обновления с 0.61.4 до 0.62.0 приложение больше не будет загружать файлы с Android (все остальные запросы работают нормально)

Реагировать на нативную версию:

0.62.0

Действия по воспроизведению

  1. Установите свежее приложение ReactNative через CLI
  2. Загрузить файл в эмулятор
  3. Попробуйте загрузить файл, используя fetch
import Picker from "react-native-image-picker"
import {request, PERMISSIONS, RESULTS} from 'react-native-permissions';

class App extends React.Component {

  async componentDidMount() {

    try {
      await request(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE)
      await Picker.launchImageLibrary({noData: true}, async (file) => {
        try {
           const body = new FormData()
           body.append("file", { type: file.type, size: file.fileSize, uri: `file://${file.path}`, name: file.fileName })
           const headers = { "content-type": "multipart/form-data", "accept": "application/json" }

          const req = await fetch("ANY_SERVER/upload/image", {
            method: "POST",
            headers,
            body
          })
          console.log(req.status)
        }  catch (e) {
          console.log(e)
        }
      })
    } catch (e) {
      console.log(e)
    }
  }

  render(){
    return <View/>
  }
}

Ожидаемые результаты

Запрос должен дойти до сервера для загрузки файла

Закуска, пример кода, скриншот или ссылка на репозиторий:

https://snack.expo.io/01W!bybf_
[Mon Apr 06 2020 21:29:18.704] LOG [TypeError: Network request failed]

Flipper React Native Team Attention Android

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

Кто еще борется с этой проблемой. это происходит из-за сетевого плагина Flipper.
Я отключил его, и все работает просто отлично.

Мой обходной путь для выполнения этой работы - закомментировать строку номер 43.

38      NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
39      NetworkingModule.setCustomClientBuilder(
40          new NetworkingModule.CustomClientBuilder() {
41            <strong i="8">@Override</strong>
42            public void apply(OkHttpClient.Builder builder) {
43      //        builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
44            }
45          });
46      client.addPlugin(networkFlipperPlugin);

в этом файле android/app/src/debug/java/com/**/ReactNativeFlipper.java

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

Здесь та же проблема!

Та же проблема !! Я застрял в этом вопросе с последних 2 дней! Почти все обыскал..

Вам нужно добавить этот uesCleartextTraffic="true" в файл AndroidManifest.xml , который находится внутри каталога _android/app/src/main/AndroidManifest.xml_.

    <application
      ...
      android:usesCleartextTraffic="true">

Согласно документам

Если для атрибута установлено значение «false», компоненты платформы (например, стеки HTTP и FTP, DownloadManager и MediaPlayer) будут отклонять запросы приложения на использование трафика в открытом виде. Сторонним библиотекам настоятельно рекомендуется также соблюдать этот параметр. Основной причиной отказа от трафика в открытом виде является отсутствие конфиденциальности, аутентичности и защиты от несанкционированного доступа; сетевой злоумышленник может подслушать передаваемые данные, а также изменить их, не будучи обнаруженным.

Вам нужно добавить этот uesCleartextTraffic = "true" в файл AndroidManifest, xml, который находится внутри каталога android/app/src/main.

    <application
      ...
      android:usesCleartextTraffic="true">

Согласно документам

Если для атрибута установлено значение «false», компоненты платформы (например, стеки HTTP и FTP, DownloadManager и MediaPlayer) будут отклонять запросы приложения на использование трафика в открытом виде. Сторонним библиотекам настоятельно рекомендуется также соблюдать этот параметр. Основной причиной отказа от трафика в открытом виде является отсутствие конфиденциальности, аутентичности и защиты от несанкционированного доступа; сетевой злоумышленник может подслушать передаваемые данные, а также изменить их, не будучи обнаруженным.

Я уже пробовал. Это используется, когда вы делаете запрос на http-сервер, но мой сервер работает на https. Он работал отлично до обновления до 0.62.
Что-то не так.

Все остальные запросы работают отлично. Не работает только загрузка файлов.

Все остальные запросы работают отлично. Не работает только загрузка файлов.

Я столкнулся со слишком многими проблемами, когда пытался обновиться до 0.62, хотя я создал новое приложение и переместил в него свой код. Я откатился на 0.61.5, пока не станет стабильно :/

Я столкнулся с той же проблемой, для RN ​​0.62.0 и 0.62.1 выдает эту ошибку: Network request filed .
Все запросы работают, кроме поста изображения

Я вернулся к 0.61.5 :( На данный момент другого выбора не осталось. Если кому-то нужна помощь в переходе на 0.61.5, обратитесь к react-native-upgrade-helper.

То же самое происходит здесь!

Я столкнулся с той же проблемой, это происходит в Android, но хорошо работает в IOS.
Я предполагаю, что это вопрос о Flipper Network.

Какое-то время я комментировал
initializeFlipper(this, getReactNativeHost().getReactInstanceManager())

в этом файле
/android/app/src/main/java/com/{your_project}/MainApplication.java

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

Другая проблема заключается в том, что в android logcat нет ошибки. Я также провел несколько дней, исследуя, как решить эту проблему, но безуспешно.

Кто еще борется с этой проблемой. это происходит из-за сетевого плагина Flipper.
Я отключил его, и все работает просто отлично.

Мой обходной путь для выполнения этой работы - закомментировать строку номер 43.

38      NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
39      NetworkingModule.setCustomClientBuilder(
40          new NetworkingModule.CustomClientBuilder() {
41            <strong i="8">@Override</strong>
42            public void apply(OkHttpClient.Builder builder) {
43      //        builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
44            }
45          });
46      client.addPlugin(networkFlipperPlugin);

в этом файле android/app/src/debug/java/com/**/ReactNativeFlipper.java

Спасибо за проблему @abumostafa. Это происходит в свежем шаблоне React Native из коробки? Если это так, это следует рассмотреть, в противном случае не стесняйтесь закрывать его.

:предупреждение:Отсутствует воспроизводимый пример
:источник информации:Похоже, в вашей проблеме отсутствует воспроизводимый пример. Пожалуйста, предоставьте Snack или репозиторий, который демонстрирует проблему, о которой вы сообщаете, в минимальной, полной и воспроизводимой форме.
:предупреждение:Использование старой версии
:источник информации:Похоже, вы используете более старую версию React Native. Пожалуйста, обновитесь до последней версии и проверьте, сохраняется ли проблема. Если это не так, сообщите нам, чтобы мы могли закрыть эту проблему. Это помогает нам убедиться, что мы рассматриваем проблемы, которые все еще существуют в текущем выпуске.

Спасибо за проблему @abumostafa. Это происходит в свежем шаблоне React Native из коробки? Если это так, это следует рассмотреть, в противном случае не стесняйтесь закрывать его.

Это все еще происходит в последнем свежем шаблоне React Native 0.62.1.

Спасибо за проблему @abumostafa. Это происходит в свежем шаблоне React Native из коробки? Если это так, это следует рассмотреть, в противном случае не стесняйтесь закрывать его.

Это все еще происходит в последнем свежем шаблоне React Native 0.62.1.

@safaiyeh
Я могу подтвердить. Это все еще происходит в последнем свежем шаблоне реакции 0.62.1.

Кто еще борется с этой проблемой. это происходит из-за сетевого плагина Flipper.
Я отключил его, и все работает просто отлично.

Мой обходной путь для выполнения этой работы - закомментировать строку номер 43.

38      NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
39      NetworkingModule.setCustomClientBuilder(
40          new NetworkingModule.CustomClientBuilder() {
41            <strong i="9">@Override</strong>
42            public void apply(OkHttpClient.Builder builder) {
43      //        builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
44            }
45          });
46      client.addPlugin(networkFlipperPlugin);

в этом файле android/app/src/debug/java/com/maxyride/app/drivers/ReactNativeFlipper.java

Все еще происходит в 0.62.2, и это временно устраняет проблему на Android.

@abumostafa

*Попробуй это *

попробуйте реализовать "rn-fetch-blob"

````
импортировать RNFetchBlob из "rn-fetch-blob";

RNFetchBlob.fetch('POST',, {
Принять: 'приложение/json',
'Тип содержимого': 'составные/данные формы',}, [
{имя: 'profileimage', имя файла: this.state.filePath.fileName, данные: RNFetchBlob.wrap(this.state.filePath.uri)},
{имя: 'uid', данные: uidy},
{имя: 'дата', данные: this.state.fDOB},
{имя: 'номер телефона', данные: this.state.pnumber},
{имя: 'адрес', данные: this.state.address},
{имя: 'пол', данные: this.state.isgender},
{имя: 'имя пользователя', данные: this.state.fulname}
// пользовательский тип контента
]).then((res) => {
console.log(разрешение)
ResponseHelper.success('Обновлено');
this.setState({isstarting:false})
})
.catch((ошибка) => {
this.setState({isstarting:false})
ResponseHelper.success('Проблема с сервером, попробуйте еще раз');
console.log('ошибка', ошибка);
})
````

это решит вашу проблему

RNFetchBlob.wrap

Спасибо. У меня есть вопрос. Эта функция RNFetchBlob.wrap преобразует файл в base64 ?

Кто еще борется с этой проблемой. это происходит из-за сетевого плагина Flipper.
Я отключил его, и все работает просто отлично.

Мой обходной путь для выполнения этой работы - закомментировать строку номер 43.

38      NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
39      NetworkingModule.setCustomClientBuilder(
40          new NetworkingModule.CustomClientBuilder() {
41            <strong i="9">@Override</strong>
42            public void apply(OkHttpClient.Builder builder) {
43      //        builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
44            }
45          });
46      client.addPlugin(networkFlipperPlugin);

в этом файле android/app/src/debug/java/com/maxyride/app/drivers/ReactNativeFlipper.java

Спасибо @abumostafa Это обходное решение сэкономило мне много времени. Я уже потратил много времени на ошибку загрузки файла, а затем получил вашу проблему. Кстати, вы знали, что проблема исправлена ​​или нет?

Я пропинговал команду Flipper, работа над этим будет отслеживаться здесь: https://github.com/facebook/flipper/issues/993

Я попробовал два решения, предложенные @abumostafa и @alfianwahid; Я попытался понизить версию до 0.61.5; Я пытался реализовать с помощью fetch (использую axios); ни один не работал. Я использую версию 0.62.1

Я попробовал два решения, предложенные @abumostafa и @alfianwahid; Я попытался понизить версию до 0.61.5; Я пытался реализовать с помощью fetch (использую axios); ни один не работал. Я использую версию 0.62.1

вы пытались пересобрать приложение после изменений??

@abumostafa Я не знаю, правильно ли я поступил. Но я удалил папку node_modules , yarn.lock , выполнил команды ./gradlew clean и ./gradlew cleanBuildCache и снова запустил npx react-native run-android .

У меня сейчас такая же проблема на RN 0.61.4 и axios 0.19.2. Также пытался комментировать initializeFlipper(this); cleanBuildCache и все еще получал Network Error .

откройте папку Android и найдите файл ReactNativeFlipper.java и
прокомментируйте строку номер 43
// builder.addNetworkInterceptor(новый FlipperOkhttpInterceptor(networkFlipperPlugin));

android/app/src/debug/java/com/maxyride/app/drivers/ReactNativeFlipper.java

В моем случае у меня нет этого файла в моем проекте

В моем случае у меня нет этого файла в моем проекте
у тебя есть папка android
если у вас есть поиск внутри папки приложения

RNFetchBlob.wrap

Спасибо. У меня есть вопрос. Эта функция RNFetchBlob.wrap преобразует файл в base64 ?

https://github.com/joltup/rn-fetch-blob/wiki/Fetch-API#class -rnfetchblob

То же самое здесь, например, попытка fetch("https://www.mocky.io/v2/5185415ba171ea3a00704eed") поднимает TypeError: Network request failed .
Бывает только в Android, и в отладке и в релизе, и с удалённой отладкой и без.
Добавление android:usesCleartextTraffic="true" не помогло (но в любом случае это для запросов без SSL).
Используя РН 0.62.2.

Изменить: получение https://jsonplaceholder.typicode.com/todos/1 работает! Как одни сайты могут работать, а другие нет?!

Обновление, проведя некоторые тесты , мы пришли к выводу, что это связано с ошибкой SSL-сертификатов. Мы не знаем, что с ними не так, но проблема также возникает в Postman с включенной опцией «Проверка SSL-сертификата». Может ли быть так, что центра сертификации нет в списке телефона?

Только что провел последний день, борясь с этой проблемой. Префикс моего абсолютного пути с «file://», чтобы вы заканчивали тремя /, решил проблему для меня.

Пример пути:

file:///data/data/com.fake/cache/file-name.jpeg

Пример моего кода:

fetch(url, {
  method: "POST",
  body: {
    uri: 'file://' + file.absolutePath,
    type: file.type,
    name: file.name,
  },
  headers: headers,
  credentials: "include",
})

Я использую react-native@^0.62.2

Исправление вышло? Как мы обновляем?

Все еще получаю его в 0.62.2, есть ли какие-либо обновления по этому поводу?

Кто еще борется с этой проблемой. это происходит из-за сетевого плагина Flipper.
Я отключил его, и все работает просто отлично.
Мой обходной путь для выполнения этой работы - закомментировать строку номер 43.

38      NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
39      NetworkingModule.setCustomClientBuilder(
40          new NetworkingModule.CustomClientBuilder() {
41            <strong i="10">@Override</strong>
42            public void apply(OkHttpClient.Builder builder) {
43      //        builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
44            }
45          });
46      client.addPlugin(networkFlipperPlugin);

в этом файле android/app/src/debug/java/com/maxyride/app/drivers/ReactNativeFlipper.java

Все еще происходит в 0.62.2, и это временно устраняет проблему на Android.

Это исправит это на данный момент.

Кто еще борется с этой проблемой. это происходит из-за сетевого плагина Flipper.
Я отключил его, и все работает просто отлично.

Мой обходной путь для выполнения этой работы - закомментировать строку номер 43.

38      NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
39      NetworkingModule.setCustomClientBuilder(
40          new NetworkingModule.CustomClientBuilder() {
41            <strong i="9">@Override</strong>
42            public void apply(OkHttpClient.Builder builder) {
43      //        builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
44            }
45          });
46      client.addPlugin(networkFlipperPlugin);

в этом файле android/app/src/debug/java/com/maxyride/app/drivers/ReactNativeFlipper.java

это сделало мой день! отлично работает с РН 0.62.0. Спасибо!

Flipper опубликовал обновление, ознакомьтесь с последним комментарием https://github.com/facebook/flipper/issues/993#issuecomment -619823916 Будет ли react-native опубликовать обновление, отражающее это исправление?

Все еще получаю Network request failed с этим новым Flipper 0.39.0 при попытке fetch("https://www.mocky.io/v2/5185415ba171ea3a00704eed") , хотя он работает в Chrome/Firefox/Safari.

@antoinerousseau Возможно, вы захотите сказать это там ... Я не проверял это.

@aprilmintacpineda Вместо этого я написал на https://github.com/facebook/react-native/issues/26939 , это кажется более связанным, и я не уверен, связано ли это с Flipper?

Эта проблема решается обновлением Flipper в этом файле

/yourproject/android/gradle.properties Строка 28
gradle {.line-numbers} 25 android.enableJetifier=true 26 27 # Version of flipper SDK to use with React Native 28 FLIPPER_VERSION=0.41.0 //upgrade to latest flipper
Видеть :
https://github.com/facebook/flipper/issues/993#issuecomment-619823916

у меня такая же проблема с реакцией 0.61.4

Спасибо @alfianwahid
Решил мою проблему.

мы можем закрыть этот тикет?

Мне тоже помогло 💪

@abumostafa , спасибо, братан, ты сэкономил мои 48 часов поиска

мы можем закрыть этот тикет?

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

Привет всем, я также пытался использовать axios и fetch , но ничего из этого не сработало, также я пытался комментировать строку Flipper и обновлять ее, но это также не дало эффекта. Если у вас, ребята, все еще есть проблемы с этим, лучше попробуйте выполнить запрос POST с помощью XMLHttpRequest , у меня это сработало.
Надеюсь, поможет.

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

Другая проблема заключается в том, что в android logcat нет ошибки. Я также провел несколько дней, исследуя, как решить эту проблему, но безуспешно.

Как вы это решили? @trglairnarra

Я столкнулся с той же проблемой, для RN ​​0.62.0 и 0.62.1 выдает эту ошибку: Network request filed .
Все запросы работают, кроме поста изображения

То же самое. Как вы это решили? Мое приложение работает нормально в режиме выпуска, но не в режиме сборки

Кто еще борется с этой проблемой. это происходит из-за сетевого плагина Flipper.
Я отключил его, и все работает просто отлично.

Мой обходной путь для выполнения этой работы - закомментировать строку номер 43.

38      NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
39      NetworkingModule.setCustomClientBuilder(
40          new NetworkingModule.CustomClientBuilder() {
41            <strong i="9">@Override</strong>
42            public void apply(OkHttpClient.Builder builder) {
43      //        builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
44            }
45          });
46      client.addPlugin(networkFlipperPlugin);

в этом файле android/app/src/debug/java/com/maxyride/app/drivers/ReactNativeFlipper.java

Вы спасли мой день. Большое спасибо :) Но безопасно ли это делать для будущих сборок?

Привет, я все еще получаю проблему в 62.2.
Пробные решения

  1. android:usesCleartextTraffic="true" => Даже все остальные мои API работают, также у меня есть HTTP.
  2. закомментировать строку номер 43
  3. нет проблем с «file://», => даже без добавления изображения, мы просто добавляем json formdata, все равно получая ту же ошибку.

Привет, я все еще получаю проблему в 62.2.
Пробные решения

  1. android:usesCleartextTraffic="true" => Даже все остальные мои API работают, также у меня есть HTTP.
  2. закомментировать строку номер 43
  3. нет проблем с «file://», => даже без добавления изображения, мы просто добавляем json formdata, все равно получая ту же ошибку.

@jamisonrachford попробуйте выполнить ваш запрос с помощью XMLHttpRequest

Эта проблема решается обновлением Flipper в этом файле

/yourproject/android/gradle.properties Строка 28

25  android.enableJetifier=true  
26  
27  # Version of flipper SDK to use with React Native 
28  FLIPPER_VERSION=0.41.0  //upgrade to latest flipper

Видеть :
facebook/flipper#993 (комментарий)

Установка вручную FLIPPER_VERSION=0.41.0 вместо использования значения по умолчанию FLIPPER_VERSION=0.33.1 с RN 0.62.2 приводит к сбою сборки (прикрепленное изображение). Я пропустил шаг в обновлении версии флиппера?
gradle issues

Я использую экспо. Как я могу это решить?

Эта проблема решается обновлением Flipper в этом файле

/yourproject/android/gradle.properties Строка 28

25  android.enableJetifier=true  
26  
27  # Version of flipper SDK to use with React Native 
28  FLIPPER_VERSION=0.41.0  //upgrade to latest flipper

Видеть :
facebook/flipper#993 (комментарий)

Ткс так много!

Эта проблема решается обновлением Flipper в этом файле

/yourproject/android/gradle.properties Строка 28

25  android.enableJetifier=true  
26  
27  # Version of flipper SDK to use with React Native 
28  FLIPPER_VERSION=0.41.0  //upgrade to latest flipper

Видеть :
facebook/flipper#993 (комментарий)
Спасибо!
Эта проблема беспокоила меня в течение двух дней

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

@Hiti3 Hiti3 Я тоже использую выставку. Я также ищу решение. Сейчас я отправляю строку base64 (без formData) и декодирую ее на стороне сервера:

Экспо
`импортировать * как ImagePicker из 'expo-image-picker';

// Выбор изображения
асинхронный экспорт по умолчанию () => {
разрешение const = await ImagePicker.requestCameraRollPermissionsAsync();
если (permission.granted === 'false') вернуть 'отказано';
const options = { allowEditing: true, base64: true };
константный результат = ImagePicker.launchImageLibraryAsync (параметры);
вернуть результат;
};
`

Сторона сервера
`
const Sharp = Требовать ('острый');
exports.uploadImage = async (req, res, next) => {
const {изображение} = req.body;
константа {
тип: тип изображения,
имя: имя изображения,
base64: изображениеBase64,
путь: путь к изображению,
изменить размер,
} = изображение;

const base64Data = imageBase64.replace( data:image/${imageType};base64 , '');

var img = новый буфер (base64Data, 'base64');
константный путь = __имя_каталога + ./../../public/${imagePath}/${imageName} ;

если (изменить размер) {
пытаться {
жду резкий(img)
.изменить размер(500, 500)
.toFormat('jpeg')
.jpeg({качество: 90})
.toFile(путь);
} поймать (ошибиться) {
console.log('ошибка записи', ошибка);
}
}
если (! изменить размер) {
пытаться {
ожидайте резкого (img).toFormat ('jpeg').jpeg ({качество: 90}).toFile (путь);
} поймать (ошибиться) {
console.log('ошибка записи', ошибка);
}
}
req.image = {тип изображения, имя изображения, путь к изображению};
следующий();
};
`

Помогите помогло. Если у вас есть какие-либо проблемы, пожалуйста, отправьте мне сообщение.

Спасибо за предоставленное решение, это работает как проверено, я просто хочу
убедитесь еще раз, прежде чем я прыгну с корабля и потеряю, может быть, день. И вы
загрузка видео или изображения, если я правильно понимаю?

Вт, 19 мая 2020 г., 21:44 Густаво Лейте Сильвано, уведомления@github.com
написал:

@Hiti3 https://github.com/Hiti3 Я тоже использую выставку. я тоже
поиск решения. Что я делаю сейчас, так это отправляю строку base64 (нет
formData) и декодирование на стороне сервера:

Экспо
`импортировать * как ImagePicker из 'expo-image-picker';

// Выбор изображения
асинхронный экспорт по умолчанию () => {
разрешение const = await ImagePicker.requestCameraRollPermissionsAsync();
если (permission.granted === 'false') вернуть 'отказано';
const options = { allowEditing: true, base64: true };
константный результат = ImagePicker.launchImageLibraryAsync (параметры);
вернуть результат;
};
`

Сторона сервера
`
const Sharp = Требовать ('острый');
exports.uploadImage = async (req, res, next) => {
const {изображение} = req.body;
константа {
тип: тип изображения,
имя: имя изображения,
base64: изображениеBase64,
путь: путь к изображению,
изменить размер,
} = изображение;

const base64Data = imageBase64.replace (данные: изображение / $ {imageType}; base64,
'');

var img = новый буфер (base64Data, 'base64');
const path = __dirname + ./../../public/${imagePath}/${imageName};

если (изменить размер) {
пытаться {
жду резкий(img)
.изменить размер(500, 500)
.toFormat('jpeg')
.jpeg({качество: 90})
.toFile(путь);
} поймать (ошибиться) {
console.log('ошибка записи', ошибка);
}
}
если (! изменить размер) {
пытаться {
ожидайте резкого (img).toFormat ('jpeg').jpeg ({качество: 90}).toFile (путь);
} поймать (ошибиться) {
console.log('ошибка записи', ошибка);
}
}
req.image = {тип изображения, имя изображения, путь к изображению};
следующий();
};
`

Помогите помогло. Если у вас есть какие-либо проблемы, пожалуйста, отправьте мне сообщение.


Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/facebook/react-native/issues/28551#issuecomment-631041471 ,
или отписаться
https://github.com/notifications/unsubscribe-auth/ACGFH2MSYJ2J5YDRASXISOTRSLOQFANCNFSM4MCRHIRA
.

0.41.0

Большое спасибо.

Эта проблема решается обновлением Flipper в этом файле
/yourproject/android/gradle.properties Строка 28

25  android.enableJetifier=true  
26  
27  # Version of flipper SDK to use with React Native 
28  FLIPPER_VERSION=0.41.0  //upgrade to latest flipper

Видеть :
facebook/flipper#993 (комментарий)

Ткс так много!

@Hiti3 Просто изображение. Но я думаю, что вы также можете загружать видео.

Спасибо @alfianwahid
но я использовал
FLIPPER_VERSION=0.44.0

Раньше у меня была та же проблема, я пробовал все и застрял на этом на 4-5 дней, затем я использовал пакет RN-FETCH-BLOB, он действительно решил проблему отправки файлов. используйте его, вы никогда не пожалеете

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

может быть проблема в том, как вы отправляете данные

может быть проблема в том, как вы отправляете данные

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

Я пробовал каждое решение, но безуспешно на Android. Я использую 0.62.2
Screen Shot 2020-05-31 at 6 40 53 PM

@tamangsuresh Эй, чувак, ты нашел это решение?

@Брианоп не мужчина

спасибо сказал обновить флиппер, я решил это

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

Привет, кто-нибудь решил эту проблему? , я тоже столкнулся с такой же проблемой.
Вам необходимо обновить флиппер до последней версии.

@liyuewen У меня есть обновленный флиппер в проекте RN, и флиппер тоже. Но никакого успеха.

@liyuewen У меня также есть обновление флиппера и флиппер в проекте RN. Но без особого успеха.

После обновления необходимо очистить кеш Android

@liyuewen Я тоже так делал. Но не повезло.

Эта проблема решается обновлением Flipper в этом файле

/yourproject/android/gradle.properties Строка 28

25  android.enableJetifier=true  
26  
27  # Version of flipper SDK to use with React Native 
28  FLIPPER_VERSION=0.41.0  //upgrade to latest flipper

Видеть :
facebook/flipper#993 (комментарий)
В моем проекте версия флиппера доступна по этому адресу D:myProjectnode_modulesreact-nativetemplateandroidgradle.properties. Я обновил флиппер в градиенте в этом месте и другие свойства gradle.properties, которые находятся в /myProject/android/gradle.properties. Также данные обновляются на сервере, и я проверил их в Почтальоне, и он тоже отлично работает в Почтальоне. Я также прокомментировал код, указанный @abumostafa.

@liyuewen Я тоже так делал. Но без везения.

Моя версия "реагировать нативно": "^ 0.62.2", которая будет успешной в будущем

Обновление Flipper до 0.45, проблема решена

Я нигде не использую Flipper, у меня все та же проблема :(

Я нигде не использую Flipper, у меня все та же проблема :(

То же самое здесь, используя Expo. Это не должно быть такой проблемой для многих людей, особенно при использовании управляемого рабочего пространства, где функция неоднозначно представлена ​​​​как рабочая функция.

У кого есть новости по этому вопросу. Я попытался обновить флиппер, закомментировав флиппер в основной активности. Все еще есть эта проблема в android.
Возвращает [TypeError: сетевой запрос не выполнен].
Но тот же код отлично работает в iOS

У кого есть новости по этому вопросу. Я попытался обновить флиппер, закомментировав флиппер в основной активности. Все еще есть эта проблема в android.
Возвращает [TypeError: сетевой запрос не выполнен].
Но тот же код отлично работает в iOS

InitializeFlipper(это, getReactNativeHost().getReactInstanceManager());

Удаление этой строки в MainApplication.java работает. Проблема все еще существует в отладочной сборке. но он работает в релизной сборке.

У кого есть новости по этому вопросу. Я попытался обновить флиппер, закомментировав флиппер в основной активности. Все еще есть эта проблема в android.
Возвращает [TypeError: сетевой запрос не выполнен].
Но тот же код отлично работает в iOS

InitializeFlipper(это, getReactNativeHost().getReactInstanceManager());

Удаление этой строки в MainApplication.java работает. Проблема все еще существует в отладочной сборке. но он работает в релизной сборке.

Спасибо, я никогда не пробовал тестировать в релизной сборке. Я попробую это сегодня.

У меня есть реактивный v59. Итак, что могут сделать люди, которые не используют Flipper? Есть обновления?

Вот все соответствующие данные, которые я мог бы извлечь из своего приложения. У меня такая же проблема на симуляторе iOS.

RN 0.62.2, Flipper 0.46.0, в извлеченном приложении Expo.

  // Turn the recording into a multipart form request with recording = the contents of our file.
  let fileUri = recording.getURI();
  if (!fileUri) {
    throw new Error('fileUri is null, it should always be initialized before reaching this point.');
  }

  let body = new FormData();
  body.append('recording', {
    uri: fileUri,
    name: 'voice-command.mp4',
    type: 'audio/mp4'
  });

  // Kick off the transcription job.
  var response;
  try {
    response = await fetch(
      'http://localhost:5000/api/v0/commands/transcription/start',
      {
        method: 'POST',
        headers: {
          'Accept': 'application/json',
        },
        body,
      },
    );
  } catch (error) {
    console.error(error);
    throw error;
  }

TypeError: Ошибка сетевого запроса
http://localhost :8081/index.bundle?platform=ios&dev=true&minify= false:32085 :31
dispatchEvent@http :// localhost:8081/index.bundle?platform=ios&dev=true&minify=false :34645:31
setReadyState@http :// localhost:8081/index.bundle?platform=ios&dev=true&minify=false :33729:33
__didCompleteResponse@http :// localhost:8081/index.bundle?platform=ios&dev=true&minify=false :33556:29
emit@http :// localhost:8081/index.bundle?platform=ios&dev=true&minify=false :9744:42
__callFunction@http :// localhost:8081/index.bundle?platform=ios&dev=true&minify=false :5491:49
http://localhost :8081/index.bundle?platform=ios&dev=true&minify= false:5213 :31
__guard@http :// localhost:8081/index.bundle?platform=ios&dev=true&minify=false :5445:15
callFunctionReturnFlushedQueue@http :// localhost:8081/index.bundle?platform=ios&dev=true&minify=false :5212:21
callFunctionReturnFlushedQueue@[собственный код]

Info.plist настроен на разрешение запросов localhost.

    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>localhost</key>
            <dict>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
        </dict>
    </dict>

Мой пакет.json:

{
  "name": "EstimateMobileApp",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "react-native start",
    "ios": "react-native run-ios",
    "android": "react-native run-android",
    "test": "jest"
  },
  "dependencies": {
    "@react-native-community/masked-view": "^0.1.10",
    "@react-navigation/native": "^5.4.2",
    "@react-navigation/stack": "^5.3.9",
    "@types/react-native-vector-icons": "^6.4.5",
    "expo": "^37.0.12",
    "expo-av": "^8.1.0",
    "react": "^16.11.0",
    "react-native": "^0.62.2",
    "react-native-gesture-handler": "^1.6.1",
    "react-native-linear-gradient": "^2.5.6",
    "react-native-reanimated": "^1.8.0",
    "react-native-safe-area-context": "^1.0.2",
    "react-native-screens": "^2.7.0",
    "react-native-unimodules": "^0.9.1",
    "react-native-vector-icons": "^6.6.0",
    "tailwind-rn": "^1.1.0"
  },
  "devDependencies": {
    "@babel/core": "^7.9.0",
    "@babel/runtime": "^7.9.0",
    "@react-native-community/eslint-config": "^0.0.5",
    "@types/jest": "^25.2.3",
    "@types/react": "^16.9.35",
    "@types/react-native": "^0.62.10",
    "@types/react-test-renderer": "^16.9.2",
    "babel-jest": "^24.9.0",
    "eslint": "^6.5.1",
    "jest": "^24.9.0",
    "metro-react-native-babel-preset": "^0.58.0",
    "react-test-renderer": "16.11.0",
    "tailwindcss": "^1.4.6",
    "typescript": "^3.9.3"
  },
  "jest": {
    "preset": "react-native",
    "transformIgnorePatterns": [
      "node_modules/(?!(jest-)?react-native|react-(native|universal|navigation)-(.*)|@react-native-community/(.*)|@react-navigation/(.*))"
    ]
  }
}

И мой подфайл:

platform :ios, '10.0'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
require_relative '../node_modules/react-native-unimodules/cocoapods.rb'

def flipper_pods()
  flipperkit_version = '0.46.0'
  pod 'FlipperKit', '~>' + flipperkit_version, :configuration => 'Debug'
  pod 'FlipperKit/FlipperKitLayoutPlugin', '~>' + flipperkit_version, :configuration => 'Debug'
  pod 'FlipperKit/SKIOSNetworkPlugin', '~>' + flipperkit_version, :configuration => 'Debug'
  pod 'FlipperKit/FlipperKitUserDefaultsPlugin', '~>' + flipperkit_version, :configuration => 'Debug'
  pod 'FlipperKit/FlipperKitReactPlugin', '~>' + flipperkit_version, :configuration => 'Debug'
end

# Post Install processing for Flipper
def flipper_post_install(installer)
  file_name = Dir.glob("*.xcodeproj")[0]
  app_project = Xcodeproj::Project.open(file_name)
  app_project.native_targets.each do |target|
    target.build_configurations.each do |config|
      cflags = config.build_settings['OTHER_CFLAGS'] || '$(inherited) '
      unless cflags.include? '-DFB_SONARKIT_ENABLED=1'
        puts 'Adding -DFB_SONARKIT_ENABLED=1 in OTHER_CFLAGS...'
        cflags << '-DFB_SONARKIT_ENABLED=1'
      end
      config.build_settings['OTHER_CFLAGS'] = cflags
    end
    app_project.save
  end
  installer.pods_project.targets.each do |target|
    if target.name == 'YogaKit'
      target.build_configurations.each do |config|
        config.build_settings['SWIFT_VERSION'] = '4.1'
      end
    end
  end
  installer.pods_project.save
end

target 'EstimateMobileApp' do
  # Pods for EstimateMobileApp
  pod 'FBLazyVector', :path => "../node_modules/react-native/Libraries/FBLazyVector"
  pod 'FBReactNativeSpec', :path => "../node_modules/react-native/Libraries/FBReactNativeSpec"
  pod 'RCTRequired', :path => "../node_modules/react-native/Libraries/RCTRequired"
  pod 'RCTTypeSafety', :path => "../node_modules/react-native/Libraries/TypeSafety"
  pod 'React', :path => '../node_modules/react-native/'
  pod 'React-Core', :path => '../node_modules/react-native/'
  pod 'React-CoreModules', :path => '../node_modules/react-native/React/CoreModules'
  pod 'React-Core/DevSupport', :path => '../node_modules/react-native/'
  pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS'
  pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation'
  pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob'
  pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image'
  pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS'
  pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network'
  pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings'
  pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text'
  pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration'
  pod 'React-Core/RCTWebSocket', :path => '../node_modules/react-native/'

  pod 'React-cxxreact', :path => '../node_modules/react-native/ReactCommon/cxxreact'
  pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi'
  pod 'React-jsiexecutor', :path => '../node_modules/react-native/ReactCommon/jsiexecutor'
  pod 'React-jsinspector', :path => '../node_modules/react-native/ReactCommon/jsinspector'
  pod 'ReactCommon/callinvoker', :path => "../node_modules/react-native/ReactCommon"
  pod 'ReactCommon/turbomodule/core', :path => "../node_modules/react-native/ReactCommon"
  pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga', :modular_headers => true

  pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
  pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
  pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'

  target 'EstimateMobileAppTests' do
    inherit! :complete
    # Pods for testing
  end

  use_native_modules!
  use_unimodules!

  flipper_pods()
  post_install do |installer|
    flipper_post_install(installer)
  end
end

target 'EstimateMobileApp-tvOS' do
  # Pods for EstimateMobileApp-tvOS

  target 'EstimateMobileApp-tvOSTests' do
    inherit! :search_paths
    # Pods for testing
  end
end

У меня есть реактивный v59. Итак, что могут сделать люди, которые не используют Flipper? Есть обновления?

У меня не было этой проблемы в предыдущих версиях. Ваша проблема может быть чем-то другим, я думаю. Вы используете URL-адрес https?

У меня есть реактивный v59. Итак, что могут сделать люди, которые не используют Flipper? Есть обновления?

У меня не было этой проблемы в предыдущих версиях. Ваша проблема может быть чем-то другим, я думаю. Вы используете URL-адрес https?

Ага, https.
Есть ли ограничения для объекта formData в RN, например, это может быть длина строки или размер formData? Похоже, что RN перехватывает этот запрос и выдает эту ошибку.

У меня есть реактивный v59. Итак, что могут сделать люди, которые не используют Flipper? Есть обновления?

У меня не было этой проблемы в предыдущих версиях. Ваша проблема может быть чем-то другим, я думаю. Вы используете URL-адрес https?

Ага, https.
Есть ли ограничения для объекта formData в RN, например, это может быть длина строки или размер formData? Похоже, что RN перехватывает этот запрос и выдает эту ошибку.

Мне ничего не известно о таких ограничениях. Можете ли вы поделиться кодом? И работало ли это на iOS?

Мне нужно достичь такой структуры тела запроса:

{
    "user_uuid":"9a137...",
    "contract_uuid":"881d9...",
    "files":[
        {"document_type_id":"20","document_type_title":"test1","private_flag":"0","file":{}},
        {"document_type_id":"21","document_type_title":"test2","private_flag":"1","file":{}},
        {"document_type_id":"22","document_type_title":"test3","private_flag":"1","file":{}}
    ]
}

где файл представляет собой файловый объект JS с полями name , type , uri , size и т. д.

const fileArrayToSend = await Promise.all(
            fileSelect.map(async (file, index) => {
                const documentTypeNum = Number(documentType[index]) || 0;

                return {
                    document_type_id: documentTypeNum,
                    document_type_title: customType ? customType[index] : null,
                    private_flag: isPrivate[index] ? 1 : 0,
                    file: {
                        name: file.name, 
                        type: file.type,
                        uri: file.uri, 
                        size: file.size
                    }
                };
            })
        );
let body = {
    contract_uuid: contract.uuid,
    user_uuid: userUUID
};

const formData = new FormData();
const appendToFormData = (formData, object) => {
    for (let [key, value] of Object.entries(object)) {
        if (value) {
            formData.append(key, value);
        }
    }
};
appendToFormData(formData, body);

fileArrayToSend.forEach((file, index) => {
    formData.append(`files[${index}]`, file, file.file.name);
});
let response = await Axios.post(`${config.apiEndpoint}/store_document_request_action`, formData, {
    headers: { 'Content-Type': 'multipart/form-data' }
});

image

У меня была такая же проблема в моем проекте с реактивной версией 0.62.
Я обновил флиппер до «0.41.0», и это сработало.
В gradle.properties
FLIPPER_VERSION=0.41.0

У меня была такая же проблема в моем проекте с реактивной версией 0.62.
Я обновил флиппер до «0.41.0», и это сработало.
В gradle.properties
FLIPPER_VERSION=0.41.0

Не могли бы вы указать путь к gradle.properties, gradle.properties в Android не содержат версии флиппера. Но gradle.properties в папке реакции Android имеют версию флиппера.

@nharis7 находится в /android/gradle.properties
Annotation 2020-06-12 210640
Но какая у вас версия реакции? флиппер есть только в реактивной версии 0.62 и выше. В старых версиях нет флиппера.

@nharis7 находится в /android/gradle.properties
Annotation 2020-06-12 210640
Но какая у вас версия реакции? флиппер есть только в реактивной версии 0.62 и выше. В старых версиях нет флиппера.

В настоящее время у меня версия 0.62.2, и я обновил свой проект с версии 0.61 в файле /android/gradle.properties. Я создал с ним новый проект, теперь я вижу версию флиппера в /android/gradle.properties. Я перенесу все свои материалы в новый проект и посмотрю, решатся ли эти проблемы или нет.

ЭТО РЕШЕНИЕ РАБОТАЛО ДЛЯ МЕНЯ
https://github.com/axios/axios/issues/1567#issuecomment-518118223

Модернизация флиппера исправляет это! (я обновился до 0.46.0)

Я пробовал все вышеперечисленное!
только обновление флиппера до 0.46 может это исправить!

image

"dependencies": {
    "@react-native-community/async-storage": "^1.11.0",
    "@react-native-community/cameraroll": "^1.7.2",
    "@react-native-community/masked-view": "^0.1.10",
    "@react-navigation/drawer": "^5.8.1",
    "@react-navigation/material-bottom-tabs": "^5.2.9",
    "@react-navigation/native": "^5.5.0",
    "@react-navigation/stack": "^5.4.1",
    "axios": "^0.19.2",
    "mime-types": "^2.1.27",
    "path": "^0.12.7",
    "query-string": "^6.13.1",
    "react": "16.11.0",
    "react-native": "0.62.2",
    "react-native-animatable": "^1.3.3",
    "react-native-animate-loading-button": "^1.0.3",
    "react-native-gesture-handler": "^1.6.1",
    "react-native-image-picker": "^2.3.1",
    "react-native-image-resizer": "^1.2.3",
    "react-native-linear-gradient": "^2.5.6",
    "react-native-paper": "^3.10.1",
    "react-native-reanimated": "^1.9.0",
    "react-native-safe-area-context": "^3.0.2",
    "react-native-screens": "^2.8.0",
    "react-native-swiper": "^1.6.0",
    "react-native-vector-icons": "^6.6.0"
  },

Эта проблема решается обновлением Flipper в этом файле

/yourproject/android/gradle.properties Строка 28

25  android.enableJetifier=true  
26  
27  # Version of flipper SDK to use with React Native 
28  FLIPPER_VERSION=0.41.0  //upgrade to latest flipper

Видеть :
facebook/flipper#993 (комментарий)

Это сработало очень хорошо, что решило проблему на Android, большое спасибо.

Я столкнулся с той же проблемой, это происходит на Android, но отлично работает на IOS.
Я думаю, что этот вопрос о сети Flipper.

На данный момент я прокомментировал
initializeFlipper(this, getReactNativeHost().getReactInstanceManager())

в этом файле
/android/app/src/main/java/com/{your_project}/MainApplication.java

Это сработало для меня :)

Я столкнулся с той же проблемой, это происходит в Android, но хорошо работает в IOS.
Я предполагаю, что это вопрос о Flipper Network.

Какое-то время я комментировал
initializeFlipper(this, getReactNativeHost().getReactInstanceManager())

в этом файле
/android/app/src/main/java/com/{your_project}/MainApplication.java

я тестировал это, тогда я смог загрузить файл

спасибо @alfianwahid

Обновление флиппера до 0.46.0 исправляет это!

В
android\gradle.properties

На решение этой проблемы у меня ушло более 5 часов. Я уже собирался сдаться, когда, наконец, смог решить проблему.

Проблема, с которой я столкнулся, близка к тому, о чем вы упоминаете, заключается в том, что я получал NetworkError при использовании expo-image-picker и попытке загрузить файл с помощью axios . Он отлично работал в iOS, но не работал в Android.

Вот как я решил проблему.

Здесь действуют две независимые проблемы. Допустим, мы получаем imageUri из средства выбора изображений, тогда мы будем использовать следующие строки кода для загрузки из внешнего интерфейса.

const formData = new FormData();
formData.append('image', {
 uri : imageUri,
 type: "image",
 name: imageUri.split("/").pop()
});

Первая проблема связана с самим imageUri . Если, скажем, путь к фотографии /user/.../path/to/file.jpg . Затем средство выбора файлов в Android даст значение imageUri как file:/user/.../path/to/file.jpg , тогда как средство выбора файлов в iOS даст значение imageUri как file:///user/.../path/to/file.jpg .

Решение первой проблемы — использовать file:// вместо file: в formData в android.

Вторая проблема заключается в том, что мы не используем правильный MIME-тип. Он отлично работает на iOS, но не на Android. Что еще хуже, так это то, что пакет выбора файлов указывает тип файла как «изображение», а не правильный тип пантомимы.

Решение состоит в том, чтобы использовать правильный MIME-тип в formData в поле type . Пример: тип mime для файла .jpg будет image/jpeg , а для файла .png будет image/png . Нам не нужно делать это вручную. Вместо этого вы можете использовать очень известный пакет npm под названием mime .

Окончательное рабочее решение:

import mime from "mime";

const newImageUri =  "file:///" + imageUri.split("file:/").join("");

const formData = new FormData();
formData.append('image', {
 uri : newImageUri,
 type: mime.getType(newImageUri),
 name: newImageUri.split("/").pop()
});

Я надеюсь, что это поможет решить вашу проблему. :)

Когда вы получили сетевую ошибку с formData, вы должны проверить правильность formData. Это очень важно.

android/gradle.properties
апгрейд Флипера
FLIPPER_VERSION=0.41.0

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

пусть данные = новые данные формы();

data.append('действие', 'ДОБАВИТЬ');
data.append('параметр', 0);
data.append('второйпараметр', 0);
data.append('file', new Blob([payload], { type: 'text/csv' }));

// это работает
пусть запрос = новый XMLHttpRequest();
request.open('POST', URL);
запрос.отправить(данные);

это сработает (:+1: (:100:

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

Итак, вопрос: что облегчило бы обнаружение этого? Закрепленная проблема? Можно ли еще обнаружить закрытую проблему (поскольку она кажется решенной?)? Ссылка на переполнение стека? Кажется, что это решено, но мы не хотим, чтобы люди продолжали тратить время, пытаясь найти известное решение.

Это должно быть закрыто, как только появится обновление — https://github.com/facebook/react-native/pull/29033. Пока этого не произошло, мы можем рассмотреть возможность его закрепления.

У меня все еще есть та же проблема после обновления версии флиппера до 0.46.0.

У меня тоже такая же проблема. Кто-нибудь, пожалуйста, помогите нам

  const imageUrl = 'http://febbler.com/20150425_114106.jpg';
    // if (true) {
    // const fileToUpload = res;
    const formData = new FormData();
    formData.append('name', 'Image Upload');
    formData.append('file_attachment', {
        uri: imageUrl,
        type: "image/jpeg",
        name: 'floral-spring-natural-landscape-wild-260nw-1274207287.jpg'
    });
    Axios({
        url: URL + '/VideosController/upload',
        method: 'POST',
        data: formData,
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'multipart/form-data'
        },
    }).then(
        response => {
            alert('res' + JSON.stringify(response.data));
        },
        error => {
            alert('check+ ' + error);
            console.warn(error);
        })
        .catch(error => {
            alert('No error' + error);
        });

Я не знаю, что я сделал неправильно, может кто-нибудь помочь мне исправить??

Если бы я обновил FLIPPER_VERSION=0.41.0, само приложение даже не открылось бы.

Может быть, это поможет кому-то, у кого все еще есть проблемы с этим.
Используете ли вы политики WAF (брандмауэра веб-приложений) от Microsoft? Если так; у них есть баг (или React Native, не уверен, кто именно виноват), который блокирует запросы с подобным Но только иногда и только на iOS. Граница составной формы, созданная на самом низком уровне в RN, иногда содержит символы (вероятно, . ), которые блокируются политиками.

Это стоит нам многих дней, чтобы понять. Майкрософт признал это. Мы отключили соответствующую политику WAF, чтобы обойти эту проблему. Например, в PostMan этого не происходит. Это создает другую границу, чем RN.

Обновление флиппера до 0.44.0 и React-native 0.63.0, у меня все еще та же проблема

Я исправил это, закомментировав строку в
/android/app/src/debug/java/com/{ваше-имя-приложения}/ReactNativeFlipper.java
файл.
это единственное исправление, которое сработало для меня!

новый NetworkingModule.CustomClientBuilder() {
@Override
public void apply (построитель OkHttpClient.Builder) {
// builder.addNetworkInterceptor(новый FlipperOkhttpInterceptor(networkFlipperPlugin));
}
});

Если вы пробовали все вышеперечисленное и вам ничего не помогает, и вы используете средство выбора изображений и данные формы, попробуйте добавить это в параметры средства выбора изображений:
```js
пусть варианты = {
title: 'Выберите изображение',
нетДанные: правда,
максимальная ширина: 500,
максимальная высота: 500,
};
ImagePicker.showImagePicker (параметры, ответ => {
.
.

Form data should look like this then:

```js
 const formData = new FormData();
        formData.append('avatar', {
          uri: response.uri, 
          name: response.fileName,
          type: 'image/jpeg',
        });

Я столкнулся с той же проблемой, это происходит в Android, но хорошо работает в IOS.
Я предполагаю, что это вопрос о Flipper Network.

Какое-то время я комментировал
initializeFlipper(this, getReactNativeHost().getReactInstanceManager())

в этом файле
/android/app/src/main/java/com/{your_project}/MainApplication.java

У меня была такая же проблема в моем проекте с реактивной версией 0.62.
Я обновил флиппер до «0.41.0», и это сработало.
В gradle.properties
FLIPPER_VERSION=0.41.0

Обе эти работы для меня. Но используйте только одно решение. Спасибо обоим. @alfianwahid @dmobisoft
Подумайте о FLIPPER_VERSION=0.41.0 лучшем решении.

Знает ли кто-нибудь из нативных разработчиков React об этой дрожащей проблеме, поскольку любой, у кого есть УПРАВЛЯЕМАЯ РАБОЧАЯ ПРОСТРАНСТВО (например, Expo), не может реализовать предлагаемые «решения» с помощью взлома RN Flipper. Любые предлагаемые решения с вашей стороны для управляемых рабочих пространств, таких как Expo?

Привет @Hiti3 Я бы предложил создать проблему в репозитории Expo здесь: https://github.com/expo/expo , так как решения здесь не применимы к управляемому рабочему пространству.

копия @brentvatne

@ Hiti3 - это не влияет на управляемые выставочные приложения, поскольку в них не интегрирован флиппер. если вы видите эту ошибку, это происходит по другим причинам, чем те, которые упомянуты в этой проблеме, и ваш лучший способ действий, если вы не можете найти решение, — это создать mcve и опубликовать его на https://github.com/ выставка/выставка/выпуски

У меня тоже не работает ошибка [TypeError: Network request failed]

КОД :

константное имя пользователя = this.state.values.username;
const lastname = this.state.values.lastname;
const images_path= this.state.images_list[0].url.uri;

                    const data = new FormData();
                   // data.append('name', 'Image Upload');
                    data.append('email', email);
                    data.append('username', username);
                    data.append('file',  { uri:images_path, name: 'image.jpg', type: 'image/jpeg/jpg',path:images_path);

                    let res = await fetch(
                        'IP-Address/cowsoncloud/admin/cowRegister.php',{
                        method: 'POST',
                        body: data,
                        headers: {
                            'Accept': "application/json",
                            'Content-Type': 'multipart/form-data',
                        },
                        })
                    .then(response => response.json())
                        .then(responseJson => {
                        console.log('upload succes',+responseJson);
                        alert('Upload success!'+JSON.stringify(responseJson));
                        })
                        .catch(error => {
                        console.log('upload error', error);
                        alert('Upload failed!'+error);
                        });

                    } else {
                    alert('Please Select File first');
                    }
                };

У меня тоже не работает ошибка [TypeError: Network request failed]

КОД :

константное имя пользователя = this.state.values.username;
const lastname = this.state.values.lastname;
const images_path= this.state.images_list[0].url.uri;

                    const data = new FormData();
                   // data.append('name', 'Image Upload');
                    data.append('email', email);
                    data.append('username', username);
                    data.append('file',  { uri:images_path, name: 'image.jpg', type: 'image/jpeg/jpg',path:images_path);

                    let res = await fetch(
                        'IP-Address/cowsoncloud/admin/cowRegister.php',{
                        method: 'POST',
                        body: data,
                        headers: {
                            'Accept': "application/json",
                            'Content-Type': 'multipart/form-data',
                        },
                        })
                    .then(response => response.json())
                        .then(responseJson => {
                        console.log('upload succes',+responseJson);
                        alert('Upload success!'+JSON.stringify(responseJson));
                        })
                        .catch(error => {
                        console.log('upload error', error);
                        alert('Upload failed!'+error);
                        });

                    } else {
                    alert('Please Select File first');
                    }
                };

Вы указали IP-адрес в виде строкового URL-адреса, который снова является неправильной проверкой.

когда я публикую без файла (изображения), я буду работать нормально, когда я отправляю файл изображения, в это время отображается ошибка [TypeError: Network request failed]; не беспокойтесь об URL

Я исправил это, закомментировав строку в
/android/app/src/debug/java/com/{ваше-имя-приложения}/ReactNativeFlipper.java
файл.
это единственное исправление, которое сработало для меня!

новый NetworkingModule.CustomClientBuilder() {
@переопределить
public void apply (построитель OkHttpClient.Builder) {
// builder.addNetworkInterceptor(новый FlipperOkhttpInterceptor(networkFlipperPlugin));
}
});

Попробуйте, это сработало для меня

У меня тоже такая же проблема. Для этого я использую хак https://github.com/facebook/react-native/issues/29021#issuecomment -662196480.

Если у вас есть версия флиппера 0.37.0, установите ее на 0.41.0, у меня это сработало.

Я столкнулся с той же проблемой, это происходит в Android, но хорошо работает в IOS.
Я предполагаю, что это вопрос о Flipper Network.

Какое-то время я комментировал
initializeFlipper(this, getReactNativeHost().getReactInstanceManager())

в этом файле
/android/app/src/main/java/com/{your_project}/MainApplication.java

Большое спасибо, это отлично сработало в моем проекте.
Я просто хочу знать, как вы могли выяснить, что инициализатор Flipper был причиной ошибки?

@alfianwahid

Просто для обмена. Для андроида можно попробовать обновить версию флиппера до 0.41, тогда будет нормально работать. Но для IOS я все еще сталкиваюсь с той же проблемой, даже если версия флиппера IOS — 0.41.5. Итак, для IOS я вручную обновляю node_modules/react-native/Libraries/Network/RCTNetworkTask.mm, и теперь он работает на IOS.

подскажите пожалуйста как обновить флиппер FLIPPER_VERSION=0.33.1 до 0.41

@sureshhallyali , вы можете обновить FLIPPER_VERSION=0.41.0 в файле android/gradle.properties. После этого очистите сборку Android и снова запустите Android.

Просто для обмена, я использую Flipper 0.50 на своей Ubuntu, и обновление с android/gradle.properties до FLIPPER_VERSION=0.50.0 тоже отлично сработало.

Я пробовал все вышеперечисленные решения (от обновления флиппера до комментирования, удаления папки отладки и всего остального), и ни одно из них не сработало для меня, я все еще получаю network error , хотя изображение сохраняется на сервере. react-native 0.62.2 , я пытаюсь уже 2 дня, это действительно расстраивает...

это мой код

let formData = new FormData();

    formData.append('id', hospitalId);
    formData.append('date', dataObj.date);
    formData.append('questions', dataObj.questions);

    dataObj.attachments.forEach((attachment) => formData.append('attachments[]', attachment));

    this.props.submit(formData);

Подать (кратко)

try {
      const res = await axios.post(url, formData, {
        headers: {
          Authorization: token ? `Bearer ${token}` : null,
          deviceId: getUniqueId(),
          Accept: 'application/json',
          'Content-Type': `multipart/form-data`,
        },
      });
      console.log('SUBMIT RES >>>> ', res.data);
    } catch (err) {
      console.log('errrr >>>> ', err.response);
      console.log('errrr >>>> ', err);
    }

Эта проблема была исправлена ​​в 0.63.1 ?

ОБНОВИТЬ:
Обновился до 0.63.2 , проблема осталась

Просто для обмена, я использую Flipper 0.50 на своей Ubuntu, и обновление с android/gradle.properties до FLIPPER_VERSION=0.50.0 тоже отлично сработало.

@vinifraga , как вы обновляете версию Flipper в IOS? Я знаю, как обновиться на Android, но не знаю, как обновить там iOS/podfile?

Привет, ребята, попробуйте rn-fetch-blob , это работает для меня
я использовал Axios для загрузки изображения, но он не работал для Android, поэтому после стольких поисков я нашел этот пакет, и он сработал

Ссылка здесь для пакета

Перепробовал все (другие библиотеки тоже rn-fetch-upload, rn-background-upload, ...), загрузка изображений не работает на iOS, а на Android все в порядке. Загрузка на S3 с использованием предварительно подписанного URL-адреса всегда возвращает мне это (хорошо работало на RN -v 0.59.x и больше не на RN -v 0.61.x:
````
"
EntityTooLarge
Предлагаемая загрузка превышает максимально допустимый размер
2025220
2023115
{...}
5н+{...}
"

@MayoudP попробуй rn-fetch-blob может сработает

Спасибо @abumostafa

Я пробовал все это решение, но не работал
1: нужно добавить
uesCleartextTraffic="true" для файла AndroidManifest.xml, который находится внутри каталога android/app/src/main/AndroidManifest.xml.
для обработки http и https

2: нужно прокомментировать
// инициализироватьFlipper(this, getReactNativeHost().getReactInstanceManager());
в этом файле /android/app/src/main/java/com/{your_project}/MainApplication.java
3: нужно прокомментировать
// builder.addNetworkInterceptor(новый FlipperOkhttpInterceptor(networkFlipperPlugin));
int его файл android/app/src/debug/java/com/{your_project}/ReactNativeFlipper.java
4: кто-то сказал, что обновление реагирует на родную версию 63.2, что также было сделано
5: Обновление версии FLIPPER до 50.0

нужно попробовать сейчас один: rn-fetch-blob
https://github.com/facebook/react-native/issues/29493

3: нужно прокомментировать
// builder.addNetworkInterceptor(новый FlipperOkhttpInterceptor(networkFlipperPlugin));

наконец-то заработало на андроиде

Используя rn-fetch-blob для вызовов API, где необходимы данные формы (подтверждено для iOS, но пока не уверен насчет Android), я просто заменил там свои обычные вызовы fetch (см. readme):

https://github.com/joltup/rn-fetch-blob

Эта проблема действительно сохраняется в течение 4 месяцев?

@MayoudP попробуй rn-fetch-blob может сработает

Нет, это не сработало, не удалось заставить его работать, используя предварительно подписанный URL-адрес и S3...

Просто для обмена. Для андроида можно попробовать обновить версию флиппера до 0.41, тогда будет нормально работать. Но для IOS я все еще сталкиваюсь с той же проблемой, даже если версия флиппера IOS — 0.41.5. Итак, для IOS я вручную обновляю node_modules/react-native/Libraries/Network/RCTNetworkTask.mm, и теперь он работает на IOS.

@ anthony1110 Что вы обновляете в node_modules/react-native/Libraries/Network/RCTNetworkTask.mm ?

@MayoudP попробуй rn-fetch-blob может сработает

Нет, это не сработало, не удалось заставить его работать, используя предварительно подписанный URL-адрес и S3...

Просто РНФС работает рп

@andrekovac , вы можете следить за этой темой и следить за решением для IOS и Android. https://github.com/facebook/react-native/issues/29021#issuecomment -664030881

Применение патча , упомянутого @anthony1110 , у меня не работает. Все еще получаю сетевые ошибки.

Но решение (для React Native 0.63 ), похоже, скоро появится: https://github.com/facebook/react-native/issues/29364#issuecomment -664526253

@andrekovac , не следуй моему патчу, это взлом. Плохое решение. Вы должны следить за обновлением https://github.com/facebook/react-native/issues/29364#issuecomment -663005914 для проблемы с IOS.

Кто еще борется с этой проблемой. это происходит из-за сетевого плагина Flipper.
Я отключил его, и все работает просто отлично.

Мой обходной путь для выполнения этой работы - закомментировать строку номер 43.

38      NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
39      NetworkingModule.setCustomClientBuilder(
40          new NetworkingModule.CustomClientBuilder() {
41            <strong i="9">@Override</strong>
42            public void apply(OkHttpClient.Builder builder) {
43      //        builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
44            }
45          });
46      client.addPlugin(networkFlipperPlugin);

в этом файле android/app/src/debug/java/com/maxyride/app/drivers/ReactNativeFlipper.java

я пробую это и работает 100%

Кто еще борется с этой проблемой. это происходит из-за сетевого плагина Flipper.
Я отключил его, и все работает просто отлично.

Мой обходной путь для выполнения этой работы - закомментировать строку номер 43.

38      NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
39      NetworkingModule.setCustomClientBuilder(
40          new NetworkingModule.CustomClientBuilder() {
41            <strong i="9">@Override</strong>
42            public void apply(OkHttpClient.Builder builder) {
43      //        builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
44            }
45          });
46      client.addPlugin(networkFlipperPlugin);

в этом файле android/app/src/debug/java/com/maxyride/app/drivers/ReactNativeFlipper.java

Это работает (Я)

Этот баг сведет меня с ума
Все решения выше не работают

Привет @victor012888 попробовал rn-fetch-blob

Я использую способ загрузки FLIPPER_VERSION=0.50.0, который окончательно решен
Моя проблема INSTALL_FAILED_INSUFFICIENT_STORAGE, потому что новые пакеты слишком большие
После добавления дополнительной оперативной памяти для виртуальной машины все работает.

Я пробовал все, все еще есть проблема.
не только отладочная версия, но и версия выпуска.

Я решил свою проблему сейчас!
①обновить FLIPPER_VERSION=0.52.0 последнее

② Код formData, подобный этому
пусть formData = новые FormData();
this.state.pics.map((значение,индекс) => {
console.log(значение)
console.log(индекс)
let file = { uri:value.uri , type: 'multipart/form-data', name:value.uri.substr (value.uri.length-10,10)};
formData.append('файл'+индекс,файл)
})

тип должен быть 'multipart/form-data', то же самое с заголовком сообщения.


надеюсь может кому поможет

Я использую способ загрузки FLIPPER_VERSION=0.50.0, который окончательно решен
Моя проблема INSTALL_FAILED_INSUFFICIENT_STORAGE, потому что новые пакеты слишком большие
После добавления дополнительной оперативной памяти для виртуальной машины все работает.

как обновить флиппер

У меня такая проблема, начал на RN63+ и у меня нет флиппера. Flipper полностью удален.

Это также происходит только для загрузки файлов с multipart/form-data , тип определен. Но запрос каждый раз пропускается на андроиде.

Здравствуйте, я использую expo 38 с RN 0.62.2.
Я использую голый рабочий процесс, поэтому я могу редактировать собственный код.
У меня те же проблемы, хотя я пробовал все перечисленные исправления:

  • Обновлен Flipper в gradle.properties до 0.52.0.
  • прокомментировал строку initializeFlipper в MainApplication.java
  • Пробовал все возможные конфигурации для типа параметра formData «файл».

Мой код выглядит так

export const createFileUploadFormData = (file, body) => {
  const isAndroid = Platform.OS === 'android'
  const fileUri = isAndroid ? file.uri : file.uri.replace('file://', '')
  const fileType = mime.getType(fileUri) || file.type
  const formData = new FormData()
  formData.append('file', {
    name: file.fileName,
    type: fileType,
    uri: fileUri,
  })
  if (body && body.length) {
    Object.keys(body).forEach((key) => {
      formData.append(key, body[key])
    })
  }
  return formData
}

Любая идея о том, что я могу упустить?

К сожалению, упомянутые обходные пути комментирования строк кода Flipper и тому подобное не сработали для меня.

Мне удалось заставить это работать, используя rn-fetch-blob .

Ниже приведен фрагмент кода, показывающий, как я использовал эту библиотеку для загрузки файла PDF:

const response = await RNFetchBlob.fetch(
  'POST',
  'http://192.168.0.20:3000/files',
  {
    Accept: 'application/json',
    'Content-Type': 'multipart/form-data',
  }, [
    {
      name: 'file',
      originalname: 'avataroriginalname',
      filename: 'avatar.pdf',
      type: 'application/pdf',
      data: RNFetchBlob.wrap(<path-to-file>),
    },
  ]
)

Я столкнулся с той же проблемой, это происходит в Android, но хорошо работает в IOS.
Я предполагаю, что это вопрос о Flipper Network.

Какое-то время я комментировал
initializeFlipper(this, getReactNativeHost().getReactInstanceManager())

в этом файле
/android/app/src/main/java/com/{your_project}/MainApplication.java

Бро, отлично работает, спасибо 👍

Здравствуйте, я использую expo 38 с RN 0.62.2.
Я использую голый рабочий процесс, поэтому я могу редактировать собственный код.
У меня те же проблемы, хотя я пробовал все перечисленные исправления:

  • Обновлен Flipper в gradle.properties до 0.52.0.
  • прокомментировал строку initializeFlipper в MainApplication.java
  • Пробовал все возможные конфигурации для типа параметра formData «файл».

[...]

АааааааааааааааааааааааааааааааааааааааааааааааааааааАААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААА, я узнал, Что Я Упускал!)
В моем случае я вводил неправильный заголовок для моего вызова выборки из-за старой копии >.<
я использовал

const headers = {
  Accept: 'application/json',
  'Content-Type': 'application/json',
}

когда вместо этого должно было быть:

const headers = {
    Accept: 'application/json',
    'Content-Type': 'multipart/form-data',
  }

Сложная часть заключается в том, что:

  1. эта ошибка работает на iOS
  2. это всегда было так на Android в течение нескольких месяцев без проблем с загрузкой файлов

Похоже, что после последних обновлений RN такие ошибки больше не допускаются при использовании Android.

Я столкнулся с той же проблемой, это происходит в Android, но хорошо работает в IOS.
Я предполагаю, что это вопрос о Flipper Network.

Какое-то время я комментировал
initializeFlipper(this, getReactNativeHost().getReactInstanceManager())

в этом файле
/android/app/src/main/java/com/{your_project}/MainApplication.java

Я получал stream closed при попытке загрузки на S3 с помощью XHR, и это решает проблему, и спасибо 👍

Я обновил Flipper до версии 0.51.2, и у меня все заработало.

Я обновил Flipper до версии 0.51.2, и у меня все заработало.

Здравствуйте @omid-ebrahimi, как вы обновили версию Flipper?

Спасибо

та же проблема 0.63.2

Я обновил Flipper до версии 0.51.2, и у меня все заработало.

Здравствуйте @omid-ebrahimi, как вы обновили версию Flipper?

Спасибо

Перейдите к android/gradle.properties и добавьте эту строку

FLIPPER_VERSION=0.52.1

У вас должны быть следующие строки в вашем android/app/build.gradle :

dependencies {
    // ....

    debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") {
      exclude group:'com.facebook.fbjni'
    }

    debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
        exclude group:'com.facebook.flipper'
    }

    debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") {
        exclude group:'com.facebook.flipper'
    }

    // ...
}

Я обновил Flipper до версии 0.51.2, и у меня все заработало.

Здравствуйте @omid-ebrahimi, как вы обновили версию Flipper?
Спасибо

Перейдите к android/gradle.properties и добавьте эту строку

FLIPPER_VERSION=0.52.1

У вас должны быть следующие строки в вашем android/app/build.gradle :

dependencies {
    // ....

    debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") {
      exclude group:'com.facebook.fbjni'
    }

    debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
        exclude group:'com.facebook.flipper'
    }

    debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") {
        exclude group:'com.facebook.flipper'
    }

    // ...
}

Обновление плавника @omid-ebrahimi также решает проблему, спасибо, и я открыл проблему по этому поводу в StackOverflow с наградой, пожалуйста, отправьте этот ответ там, и я могу присудить вам награду.

Обновляю флиппер до версии 52.0
и используйте выборку, и это сработало для меня
Но при использовании axios.post не работает
И когда используйте аксиомы, такие как
axios({ method:'post , data : file , url:'something ',............. })
это работает нормально

И не устанавливайте заголовок
'Content-Type': 'multipart/form-data'
тоже будет нормально работать

Кто еще борется с этой проблемой. это происходит из-за сетевого плагина Flipper.
Я отключил его, и все работает просто отлично.

Мой обходной путь для выполнения этой работы - закомментировать строку номер 43.

38      NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
39      NetworkingModule.setCustomClientBuilder(
40          new NetworkingModule.CustomClientBuilder() {
41            <strong i="9">@Override</strong>
42            public void apply(OkHttpClient.Builder builder) {
43      //        builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
44            }
45          });
46      client.addPlugin(networkFlipperPlugin);

в этом файле android/app/src/debug/java/com/maxyride/app/drivers/ReactNativeFlipper.java

@abumostafa Предоставленное вами решение эффективно, но оно по-прежнему не работает для файлов, начинающихся с «file:///».
Например:

  • Это может сработать: formData.append('files', {uri:'https://xxx.jpg', type:'image/jpeg', name:'test.jpeg' })
  • Это не работает: formData.append('files', {uri:'file:///xxx.jpg', type:'image/jpeg', name:'test.jpeg' })

Моя реагирующая нативная версия:

"dependencies": {
    "react": "^16.11.0",
    "react-native": "^0.62.2"
  }

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

{
 "react": "16.13.1",
  "react-native": "0.63.2",
}

Как насчет iOS?

Такая же проблема и на iOS. Пытался изменить версию Flipper с 0.33.1 на 0.50.0 и выше в моем подфайле. Это происходит у меня на

{
  "react": "16.11.0",
  "react-native": "0.62.2",
}

Предложение @abumostafa заставило его работать на Android, но все еще не смогло заставить его работать на iOS.

РЕДАКТИРОВАТЬ: Обновлен до react-native: 0.63.2 , все та же проблема.

Смена версий Flipper у меня не работает. Я попытался прокомментировать строку, которая может помочь, но также столкнулась с той же проблемой. Мой обходной путь - использовать WebView и injectJavascript для загрузки. Этот хак работает хорошо для меня.

Мой обходной путь заключается в использовании <WebView> и внедрении javascript. Когда я хочу загрузить новый файл, я передам соответствующие параметры построителю строковых функций generateUploadCodes() , и он сгенерирует строку, которая будет внедряется в веб-просмотр.

  function generateUploadCodes(name, data) {
    return `function upload() {
      let formData = new FormData();
      formData.append('file', new Blob(["${data}"], {type: 'text/csv'}));

      let xhr = new XMLHttpRequest();
      xhr.open("post","https://myuploadserver.com");
      xhr.setRequestHeader("Authorization", "Bearer ${accessToken}");
      xhr.responseType = "json";
      xhr.onload = () => {
         window.ReactNativeWebView.postMessage(xhr.response);
      };
      xhr.send(formData);
    }
    upload(); 
    `;
  }

С этим я могу просто позвонить

let toInject = generateUploadCodes("mydata.txt", "somedata");
webRef.current.injectJavascript(toInject);

Чтобы получить ответ от загрузки, мы можем использовать webview.ReactNativeWebView.postMessage('our response'); . Затем обработайте ответ с помощью обработчика WebView onMessage .

Прежде всего, мы должны создать нашу ссылку и наш компонент WebView , как это

  const webview = useRef(null);

  <WebView
        ref={webview}
        source={{html: 'hi'}}
        injectedJavaScript={''}
        javaScriptEnabledAndroid={true}
        javaScriptEnabled={true}
        onMessage={event => {
              console.log(event.nativeEvent.data);
        }}
      />

Собрав все исправления здесь, мы надеемся, что скоро сможем получить исправление для этого слияния с ядром:

iOS: отменить PR, требуется изменение node_modules: https://github.com/facebook/react-native/issues/29364#issuecomment -671565181, PR представлен здесь для исправления: https://github.com/facebook/react -родной/тянуть/29595

Android: обновить версию Flipper https://github.com/facebook/react-native/issues/28551#issuecomment -674351386, PR поднят https://github.com/facebook/react-native/pull/29787

Если кто-то все еще сталкивается с проблемой в версии RN 0.62 или выше, решение:
Вы должны указать uri, имя и тип носителя, который вы загружаете.

formData.append('media_incident', {
          uri: image.path,
          type: image.mime,
          name: 'filename.jpg',
        });

Затем перейдите к строке номер 43 и прокомментируйте эту строку:
builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
в android/app/src/debug/java/com/"имя проекта"/ReactNativeFlipper.java

Я потратил около 8 часов на поиск решения ошибки.

Если кто-то все еще сталкивается с проблемой в версии RN 0.62 или выше, решение:
Вы должны указать uri, имя и тип носителя, который вы загружаете.

formData.append('media_incident', {
          uri: image.path,
          type: image.mime,
          name: 'filename.jpg',
        });

Затем перейдите к строке номер 43 и прокомментируйте эту строку:
builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
в android/app/src/debug/java/com/"имя проекта"/ReactNativeFlipper.java

Я потратил около 8 часов на поиск решения ошибки.

Да, у меня тоже так было, подтвердил это здесь: https://github.com/facebook/react-native/issues/29364#issuecomment -679370449

PR обновления Flipper, поднятый FB https://github.com/facebook/react-native/pull/29787

Собрав все исправления здесь, мы надеемся, что скоро сможем получить исправление для этого слияния с ядром:

iOS: отменить PR, требуется изменение node_modules: https://github.com/facebook/react-native/issues/29364#issuecomment -671565181, PR представлен здесь для исправления: https://github.com/facebook/react -родной/тянуть/29595

Android: обновить версию Flipper https://github.com/facebook/react-native/issues/28551#issuecomment -674351386, PR поднят https://github.com/facebook/react-native/pull/29787

У меня была такая же проблема, и ни одно из решений здесь не помогло мне.

Что сработало, так это то, что мне просто не хватает mime_type моей загрузки.

Убедитесь, что эти данные указаны правильно:

  • ури
  • имя
  • тип

Работал с обновлением флиппера до FLIPPER_VERSION=0.52.1 .

Измените в этом файле - android/gradle.properties и запустите yarn android .

fetch

let uriParts = this.state.pickedFileUri.split('.');
let fileType = uriParts[uriParts.length - 1];
const file = {
            uri: this.state.pickedFileUri, // works with fileurl like file:///.....
            name: `myFile.${fileType}`,
            type: `text/${fileType}`,
        };

const data = new FormData();
data.append('file', file);
return fetch(url, {
        method: 'POST',
        body: data,
});

пакет.json

   "react": "16.11.0",
    "react-native": "0.62.2",

Есть ли обходной путь для этого с помощью Expo?

кто-нибудь решит эту проблему? уже пробовал каждый метод, например, прокомментировал какую-то команду флиппера, обновил флиппер на graddle.properties, даже я понизил свой RN с 0,63 до 0,62, все равно получил эту ошибку. Уже застрял на этой ошибке на 2 дня. Когда я пытаюсь отправить данные без файла в свой API, он работает нормально, но когда я пытаюсь загрузить файл, такой как изображение, в свой API, я получаю эти ошибки

@safaiyeh все еще не работает для меня, сэр, я уже пробовал все это.

Если кто-то все еще сталкивается с проблемой в версии RN 0.62 или выше, решение:
Вы должны указать uri, имя и тип носителя, который вы загружаете.

formData.append('media_incident', {
          uri: image.path,
          type: image.mime,
          name: 'filename.jpg',
        });

Затем перейдите к строке номер 43 и прокомментируйте эту строку:
builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
в android/app/src/debug/java/com/"имя проекта"/ReactNativeFlipper.java

Я потратил около 8 часов на поиск решения ошибки.

я сделал то же самое, но все еще сталкиваюсь с той же проблемой. я использую
"реагировать": "16.13.1",
"реагировать-родной": "0.63.1",

@sadhruva У меня такая же среда, как и у вас, и это решило проблему для меня.

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

Я пробовал:

  • Комментирование строки в java-файле

  • Меняю версию флиппера

  • Написание кода двумя разными способами

И это все еще не работает. Странно то, что форма ДЕЙСТВИТЕЛЬНО работает в других частях моего приложения, но на этом конкретном экране она не работает (только на Android, потому что на iPhone она работает так, как ожидалось).

Итак, похоже, единственное, что я могу сделать прямо сейчас, — это продолжить разработку только для iOS и отложить выпуск Android.

Жизнь есть жизнь... наверное.

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

Я пробовал:

  • Комментирование строки в java-файле
  • Меняю версию флиппера
  • Написание кода двумя разными способами

И это все еще не работает. Странно то, что форма ДЕЙСТВИТЕЛЬНО работает в других частях моего приложения, но на этом конкретном экране она не работает (только на Android, потому что на iPhone она работает так, как ожидалось).

Итак, похоже, единственное, что я могу сделать прямо сейчас, — это продолжить разработку только для iOS и отложить выпуск Android.

Жизнь есть жизнь... наверное.

Испытывая ту же проблему. Однако странно, что одна и та же функция отлично работает с реакцией, поэтому я пошел проверять сетевые пакеты и обнаружил, что мой пакет сетевого запроса реакции webAPP идет с заголовком content -type:multipart/form-data , в то время как RN идет с content -type:application/form-data .
Поэтому я отредактировал свою функцию запроса следующим образом:
await fetch(url, { method: 'POST', headers: { 'Content-Type': 'multipart/form-data', }, body: formData, })
Затем включите тип и имя в formData
let formData = new FormData(); formData.append('file', {uri: fileUri,type:fileType,name:fileName});
Не знаю почему, но он просто чудесным образом работает.

я использую реагирующую нативную версию 0.63.2 и выполнил следующие шаги, чтобы решить проблему
с помощью react-native-cli

1 - в android/app/src/main/java/com/{yourProject}/MainApplication.java
комментарий -> initializeFlipper(this, getReactNativeHost().getReactInstanceManager())

2 - в android/app/src/debug/java/com/{yourProject}/ReactNativeFlipper.java
комментарий в строке 43 -> builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));

3 - в android/gradle.properties
изменить FLIPPER_VERSION=0.37.0 на FLIPPER_VERSION=0.52.1

4 - в android/app/build.gradle
перезаписать текущие зависимости Flipper на

  dependencies {
    // ....

    debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") {
      exclude group:'com.facebook.fbjni'
    }

    debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
        exclude group:'com.facebook.flipper'
    }

    debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") {
        exclude group:'com.facebook.flipper'
    }

    // ...
  }

и после всех этих шагов -> npx react-native run-android или yarn android

5 - в моем запросе на загрузку сообщения

  const data = new FormData();
  // Android need to add "file:///" to work

  const path =
    Platform.OS === 'android' ? `file:///${image?.path}` : image?.path;

    const file = { // use name, type, uri as object keys
      name: image?.fileName,
      type: image?.type,
      uri: path,
    };


    data.append('file', file);

    // using axios
    const response = await api.post(
          'apiurl',
          data,
          {
            headers: {
              Authorization: `Bearer ${token}`,
            },
          },
        );

Надеюсь это поможет

@ mathrocha12100 , не могли бы вы правильно отформатировать свой комментарий? Некоторый код кажется неуместным, я мог бы попытаться сделать это шаг за шагом.

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

Ваше здоровье.

Все еще не работает.

@dlogvin
Я столкнулся с этой проблемой вчера и исправил ее, как сказал @omid-ebrahimi [обновите Flipper], плюс прокомментируйте эту строку
builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin)); в ReactNativeFlipper.java

Папки чистой сборки [ios, android]
затем постройте снова, это хорошо работает для меня :)

@dlogvin
Я столкнулся с этой проблемой вчера и исправил ее, как сказал @omid-ebrahimi [обновите Flipper], плюс прокомментируйте эту строку
builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin)); в ReactNativeFlipper.java

Папки чистой сборки [ios, android]
затем постройте снова, это хорошо работает для меня :)

Как именно обновить флиппер?

edit: я уже пытался заменить версию FLIPPER и прокомментировать строки, но все равно ничего. На самом деле, в отладочной версии приложения изображения не загружаются после комментирования строк. Это полный бардак...

@dlogvin в android/gradle.properties
изменить FLIPPER_VERSION=0.37.0 на FLIPPER_VERSION=0.52.1

вот реакция и реакция-родная версия, если вам интересно

 "react": "16.13.1",
  "react-native": "0.63.2",

@anastely Я сделал это... до сих пор ничего :(

Я сдаюсь...

@dlogvin Я пытался загрузить изображения с сервера, и он загружается, так что извините :(

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

Прошу прощения, но проект не с открытым исходным кодом. Пробовал загружать файлы, на других экранах форма работает, а на этом конкретном нет. Придется ждать обновления от RN, а пока я просто разработаю версию для iPhone и оставлю версию для Android в БЕТА.

у меня работает, я меняю версию флиппера в файле gradle.setting FLIPPER_VERSION=0.30.2 на FLIPPER_VERSION=0.52.1, затем очищаю gradlew и запускаю проект.
в реакции на родное использование метода XMLHttpRequest.
экспортировать let dataWithImage = async (endPoint, params) => {
пусть токен = ожидание AsyncStorage.getItem («токен»);
пусть xhr = новый XMLHttpRequest();
пусть formData = новые FormData();
for (пусть ключ в параметрах) {
formData.append (ключ, параметры [ключ]);
}
xhr.withCredentials = истина;
xhr.addEventListener('readystatechange', функция () {
если (this.readyState === 4) {
console.log(this.responseText, '===> это ответ');
}
});
xhr.open('POST', url + endPoint);
xhr.setRequestHeader('Авторизация', 'Предъявитель' + токен);
xhr.send (данные формы);
};

Я столкнулся с аналогичной проблемой с запросом POST через мой сервер (HTTPS), работает нормально для iOS, но не для Android. Пытался отключить флиппер и обновить его, но проблема осталась. Пробовал с другим сервером, например (https://jsonplaceholder.typicode.com/), и, похоже, работает как положено.

Описание ошибки не говорит мне слишком много «Ошибка сети». Уже проверил разрешения в Интернете и установил android:usesCleartextTraffic= «true» в манифесте Android.

Та же проблема с выборкой или аксиомами.

Для IOS в
Файл node_modules/react-native/Libraries/Image/RCTLocalAssetImageLoader.mm

Заменить ниже

  • -(RCTImageLoaderCancellationBlock)loadImageForURL:(NSURL *)imageURL
    размер: (CGSize) размер
    масштаб: (CGFloat) масштаб
    resizeMode:(RCTResizeMode)resizeMode
    progressHandler:(RCTImageLoaderProgressBlock)progressHandler
    partialLoadHandler:(RCTImageLoaderPartialLoadBlock)partialLoadHandler
    завершениеHandler: (RCTImageLoaderCompletionBlock) завершениеHandler
    {
    UIImage *image = RCTImageFromLocalAssetURL(imageURL);
    если (изображение) {
    если (обработчик прогресса) {
    обработчик прогресса (1, 1);
    }
    завершениеHandler (ноль, изображение);
    } еще {
    NSString *message = [NSString stringWithFormat:@"Не удалось найти изображение %@", imageURL];
    RCTLogWarn(@"%@", сообщение);
    обработчик завершения (RCTErrorWithMessage (сообщение), ноль);
    }

    вернуть ноль;
    }

С участием

  • -(RCTImageLoaderCancellationBlock)loadImageForURL:(NSURL *)imageURL
    размер: (CGSize) размер
    масштаб: (CGFloat) масштаб
    resizeMode:(RCTResizeMode)resizeMode
    progressHandler:(RCTImageLoaderProgressBlock)progressHandler
    partialLoadHandler:(RCTImageLoaderPartialLoadBlock)partialLoadHandler
    завершениеHandler: (RCTImageLoaderCompletionBlock) завершениеHandler
    {
    __block автоматически отменен = std::make_shared<:atomic i="44">>(false);
    RCTExecuteOnMainQueue(^{
    если (отменено->загрузить()) {
    вернуть;
    }

    UIImage *image = RCTImageFromLocalAssetURL(imageURL);
    если (изображение) {
    если (обработчик прогресса) {
    обработчик прогресса (1, 1);
    }
    завершениеHandler (ноль, изображение);
    } еще {
    NSString *message = [NSString stringWithFormat:@"Не удалось найти изображение %@", imageURL];
    RCTLogWarn(@"%@", сообщение);
    обработчик завершения (RCTErrorWithMessage (сообщение), ноль);
    }
    });

    вернуться ^ {
    отменено-> хранить (истина);
    };
    }

Этот..

Лайк и лайк, если получилось 👍

Привет, все исправления только что были объединены с мастером: https://github.com/facebook/react-native/commit/d8b70b19b39ead4dd41895d666d116a43c56474e .

Также было исправление для iOS, уже зафиксированное в master.

Я разместил здесь запрос обратного порта: https://github.com/react-native-community/releases/issues/203#issuecomment -695052285, ожидайте этого в 0.63.3 или 0.64.

@safaiyeh Я сейчас в восторге от этого комментария, который вы добавили. Я надеюсь вернуться к разработке для Android как можно скорее.

Ваше здоровье.

Спасибо большое.

Ага, рад, что скоро все исправят 🙇‍♂️ Я тоже был немного беспокойным, гоняясь за нужными людьми и все такое. Становимся ближе!

Спасибо, жду.
На данный момент я использую тот же обходной путь, что и @mathrocha12100.

Я сталкиваюсь с аналогичной проблемой на iOS. Не относится к файлам, но в iOS мои вызовы API терпят неудачу случайным образом, один и тот же запрос API будет работать один раз, в другой раз произойдет сбой с неопределенным ответом.
на андроиде все работает нормально
Я использую axios 0.19.2, пробовал извлекать, но результат тот же
Реагировать родной 0.62.2

@vajid-khan, вы подтвердили, что проблема связана с вашим интерфейсом? Попробуйте использовать postman или Insomnia, чтобы проверить, является ли это вашим бэкэндом, вашим реагирующим нативным кодом или самим фреймворком. У меня вообще не было проблем с запросами других API.

@dlogvin да, я подтвердил почтальону. С почтальоном я получаю ответ каждый раз, даже андроид работает все время. Я сталкиваюсь с этим только на iOS

@dlogvin да, я подтвердил почтальону. С почтальоном я получаю ответ каждый раз, даже андроид работает все время. Я сталкиваюсь с этим только на iOS

@vajid-khan, это немного странно. Эта конкретная проблема основана на запросах методов POST с файлами. Могли бы также выработать некоторую отладку, возможно, заголовки или что-то в этом роде.

@dlogvin да, я подтвердил почтальону. С почтальоном я получаю ответ каждый раз, даже андроид работает все время. Я сталкиваюсь с этим только на iOS

@vajid-khan, это немного странно. Эта конкретная проблема основана на запросах методов POST с файлами. Могли бы также выработать некоторую отладку, возможно, заголовки или что-то в этом роде.

Я подтверждаю его проблему, я тоже столкнулся с ней в «ios» после обновления Flipper до 0.54.0, как упоминал @safaiyeh в PR!


Редактировать:
Когда я открываю xCode и отправляю запрос, я вижу это в журналах

[native] Missing request token for request: <NSURLRequest: 0x600000dda4e0> { URL: file:///Users/anastely/Library/Developer/CoreSimulator/Devices/13C4E525-8577-44A3-A5F3-F6693B9CDFF6/data/Containers/Data/Application/FD4541BF-805A-4420-9AF3-0A9A55854126/tmp/react-native-image-crop-picker/7E060441-D875-4883-BD34-89872ECB3CB7.jpg }

Так что я получил это после поиска # https://github.com/facebook/react-native/commit/31980094107ed37f8de70972dbcc319cc9a26339
И заменив его, как они сказали,
почтовый запрос работает в некоторых случаях!
В моем приложении я отправляю изображение в почтовом запросе, если я выбираю изображение из _по умолчанию в симуляторе_, запрос не получил никакого ответа _'не работает, как раньше'_, но вышеуказанная проблема исчезла,
Так что я не знаю, что происходит!
Если кто-нибудь может проверить этот случай на своем физическом устройстве и сообщить нам!

@mathrocha12100 большое спасибо, ваш ответ решил мою проблему

Та же проблема, попробовал все, что здесь сказано! До сих пор не работает!

Попробуй это

let formData = new FormData();
formData.append('file', {
     name: filename,
     uri: uri // For android the path should start like this "content://". If uri starts with "file://", replace with "content://" 
     type: type
}
axios.post(URL, formData, { headers: { 'Content-Type': 'multipart/form-data'}})

Попробуй это

let formData = new FormData();
formData.append('file', {
     name: filename,
     uri: uri // For android the path should start like this "content://". If uri starts with "file://", replace with "content://" 
     type: type
}
axios.post(URL, formData, { headers: { 'Content-Type': 'multipart/form-data'}})

Это не проблема. Другие формы в моем приложении работают, кроме конкретной. Это не проблема пути.

Попробуй это

let formData = new FormData();
formData.append('file', {
     name: filename,
     uri: uri // For android the path should start like this "content://". If uri starts with "file://", replace with "content://" 
     type: type
}
axios.post(URL, formData, { headers: { 'Content-Type': 'multipart/form-data'}})

Это не проблема. Другие формы в моем приложении работают, кроме конкретной. Это не проблема пути.

Да, другой метод публикации будет работать, кроме загрузки файла, поскольку он связан с Flipper. Измените версию Flipper на 0.58 и запустите gradlew clean в папке Android. Для меня после этого работает только переход на content://, в противном случае выдает ошибку сети.

@safaiyeh Есть новости по этому поводу?
Я хочу выпустить свое приложение :(

Кто еще борется с этой проблемой. это происходит из-за сетевого плагина Flipper.
Я отключил его, и все работает просто отлично.

Мой обходной путь для выполнения этой работы - закомментировать строку номер 43.

38      NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
39      NetworkingModule.setCustomClientBuilder(
40          new NetworkingModule.CustomClientBuilder() {
41            <strong i="9">@Override</strong>
42            public void apply(OkHttpClient.Builder builder) {
43      //        builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
44            }
45          });
46      client.addPlugin(networkFlipperPlugin);

в этом файле android/app/src/debug/java/com/**/ReactNativeFlipper.java

Все еще проблема в реакции родной 0.63. Это решение сработало для меня.

Та же проблема, попробовал все, что здесь сказано! До сих пор не работает!
Первый шаг @mathrocha12100 решил мою проблему!
android/app/src/main/java/com/{yourProject}/MainApplication.java comment -> initializeFlipper(this, getReactNativeHost().getReactInstanceManager())

Здесь та же проблема!

Первая попытка исправить проблему:

обновить Flipper до 0.46.0 (не помогло)
обновить Flipper до 0.52.0 (не помогло)
комментарий к строке 43 ReactNativeFlipper.java (не сработало)
удалить папку отладки в android/app/src/debug (не помогло)

Версии, установленные в моем проекте:

"реагировать": "16.13.1",
"реагировать-родной": "0.63.2",
"аксиос": "^ 0.20.0",

Нам нужно срочное решение

Здесь та же проблема!

Первая попытка исправить проблему:

обновить Flipper до 0.46.0 (не помогло)
обновить Flipper до 0.52.0 (не помогло)
комментарий к строке 43 ReactNativeFlipper.java (не сработало)
удалить папку отладки в android/app/src/debug (не помогло)

Версии, установленные в моем проекте:

"реагировать": "16.13.1",
"реагировать-родной": "0.63.2",
"аксиос": "^ 0.20.0",

Нам нужно срочное решение

Я абсолютно согласен с этим... нам нужно срочное ПОСТОЯННОЕ решение. Это задерживает мой проект, другими словами, это сильно влияет на меня. Это становится действительно раздражающим, ожидание становится все дольше и дольше. Когда выйдет обновление?

Спасибо всем за терпение! Исправление было выпущено с 0.63.3, обязательно отмените все сделанные вами действия и правильно обновите его!

Убедитесь, что вы также очистили свою сборку Gradle.

Если возникли какие-либо новые проблемы, пожалуйста, создайте новую проблему 🎉🤟😁

Спасибо всем за терпение! Исправление было выпущено с 0.63.3, обязательно отмените все сделанные вами действия и правильно обновите его!

Убедитесь, что вы также очистили свою сборку Gradle.

Если возникли какие-либо новые проблемы, пожалуйста, создайте новую проблему 🎉🤟😁

Обновил, все та же проблема. Должны ли мы изменить gradle.properties? мой указывает FLIPPER_VERSION=0.33.1

Обновление: изменил версию Flipper на: 0.54.0 , все еще не работает.

люди, которые не выполнили какое-либо исправление, указанное выше, и обновили его, подтвердите, если это не проблема, с которой я столкнулся сам. Это не решило проблему. @мурилокругнер ??

@dlogvin Я отменил изменения и обновился до версии 63.3, но это все равно не сработало, нам нужно обновить Flipper до какой-то версии?

В моем проекте Flipper находится в версии: 0.37.0

Потом обновление не помогло.

@safaiyeh

Обновление не помогло.

Это простое дело, просто загрузить, и это не работает. Откроем новую тему

Это простое дело, просто загрузить, и это не работает. Откроем новую тему

Это простое дело, которое СРОЧНО исправить. Это влияет на многие приложения, загрузка файлов является обязательной для многих сервисов.

Мы должны определенно открыть новую проблему.

Вы можете использовать это для полной разницы https://react-native-community.github.io/upgrade-helper/

Вы можете использовать это для полной разницы https://react-native-community.github.io/upgrade-helper/

Уже пользовался этим, ничего не помогло.

Может глупый вопрос :D
Но как обновиться до последней версии 0.63.3?
с помощью помощника и копирования-вставки dif?

Может глупый вопрос :D
Но как обновиться до последней версии 0.63.3?
с помощью помощника и копирования-вставки dif?

npx react-native upgrade попробуйте, но я на 99,99% уверен, что "исправление" не сработает.

Я обновил свой проект с 63.2 до 63.3 и Flipper с 0.37.0 до 0.54.0.

Но это все еще не работает

Я делаю что-то неправильно?

После обновления до 0.63.3

У меня возникли некоторые странные проблемы в iOS , когда я выбираю изображение из образа файловой системы и отправляю запрос, который не работает! но когда я загружаю случайное изображение, а затем повторяю попытку, это работает очень хорошо! «Симулятор 13.3»

Андроид работает очень хорошо ;)

Так что вопрос еще не решен.

В этой новой версии нет загрузки файлов.

Пожалуйста, откройте тему снова @safaiyeh

Откроем новую тему. С минимальным репро с последним родным реагом.

Один для проблемы @anastely ios и

@dlogvin Проблема с Android.

Пожалуйста, отметьте меня в теме.

Все решения, которые я нашел в Интернете, пока ни одно не сработало.

Я столкнулся с этой проблемой, начиная с версии 0.62 React Native.

У меня был проект, в котором мне нужно было загрузить файлы, но крайний срок был коротким, поэтому альтернативой было преобразование файла в строку Base64 и отправка его на серверную часть.

Однако решение этой проблемы крайне необходимо.

Все решения, которые я нашел в Интернете, пока ни одно не сработало.

Я столкнулся с этой проблемой, начиная с версии 0.62 React Native.

У меня был проект, в котором мне нужно было загрузить файлы, но крайний срок был коротким, поэтому альтернативой было преобразование файла в строку Base64 и отправка его на серверную часть.

Однако решение этой проблемы крайне необходимо.

Я согласен, это критическая проблема, и она затрагивает ВСЕ приложения, использующие загрузку файлов.

@safaiyeh да, я открою тему. Сделаю, когда приеду домой.

Ребята, я не покупаюсь. Это сработало!

Решение, которое сработало для меня: я обновил React Native до 0.63.3 и Flipper до 0.54.0, но он все еще не работал.

Я перезапустил эмулятор Android и снова открыл его. и это сработало !!

Спасибо вам всем!

Ребята, я не покупаюсь. Это сработало!

Решение, которое сработало для меня: я обновил React Native до 0.63.3 и Flipper до 0.54.0, но он все еще не работал.

Я перезапустил эмулятор Android и снова открыл его. и это сработало !!

Спасибо вам всем!

Интересно, что... Я создал приложение для выпуска... протестировал на физическом устройстве, то же самое. Я попытался использовать отладочный apk, та же ошибка «сетевая ошибка».

Еще не решено. Скоро открою тему.

Ребята, я не покупаюсь. Это сработало!

Решение, которое сработало для меня: я обновил React Native до 0.63.3 и Flipper до 0.54.0, но он все еще не работал.

Я перезапустил эмулятор Android и снова открыл его. и это сработало !!

Спасибо вам всем!

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

Ребята, я не покупаюсь. Это сработало!
Решение, которое сработало для меня: я обновил React Native до 0.63.3 и Flipper до 0.54.0, но он все еще не работал.
Я перезапустил эмулятор Android и снова открыл его. и это сработало !!
Спасибо вам всем!

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

@dlogvin Это также работает на физическом устройстве, я думаю, что это что-то в кеше

Ребята, я не покупаюсь. Это сработало!
Решение, которое сработало для меня: я обновил React Native до 0.63.3 и Flipper до 0.54.0, но он все еще не работал.
Я перезапустил эмулятор Android и снова открыл его. и это сработало !!
Спасибо вам всем!

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

@dlogvin Это также работает на физическом устройстве, я думаю, что это что-то в кеше

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

Если кто-то все еще сталкивается с проблемой в версии RN 0.62 или выше, решение:
Вы должны указать uri, имя и тип носителя, который вы загружаете.

formData.append('media_incident', {
          uri: image.path,
          type: image.mime,
          name: 'filename.jpg',
        });

Затем перейдите к строке номер 43 и прокомментируйте эту строку:
builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
в android/app/src/debug/java/com/"имя проекта"/ReactNativeFlipper.java

Я потратил около 8 часов на поиск решения ошибки.

После того, как я попробовал все хаки, описанные выше, этот спас меня. Большое спасибо!

обновление до 0.63.3 помогло мне, наконец

в моем случае ранее этот код формы загрузки работал нормально:

form.append('file', {
    uri: file,
    type: filetype,
    name: filename,
})

затем я установил некоторые другие зависимости, а затем возвращает сетевую ошибку.
поэтому мне пришлось изменить тип с явным префиксом:

form.append('file', {
    uri: file,
    type: 'audio/' + filetype,
    name: filename,
})

В RN 63.3 эта проблема устранена. Оно работает!

обновление до 63.3 тоже решило для меня

Неа..

RN 63.3 работает в основном потому, что его версия флиппера использует 0.54.0.
Если RN 63.3 все еще не работает, мы должны проверить
андроид:
FLIPPER_VERSION в файле android/gradle.properties
iOS:
pod install --repo-update

Я использую RN 0.63.3 и обновил FLIPPER_VERSION до 0.54.0, но он все еще не работает. Любое другое доступное решение?

сделал это, это не из-за версии флиппера, я использую react -native 0.62.2 и версию флиппера: 0.33.1, закомментировал строку 43 в android/app/src/debug/java/com/maxyride/app/ drivers/ReactNativeFlipper.java и убедитесь, что тип загрузки указан правильно,

Мы должны использовать эти инструменты для обновления до RN 63.3. Убедитесь, что каждое слияние выполнено правильно.
https://react-native-community.github.io/upgrade-helper/

РЕШЕНО!
Измените версию react navite в package.json:
"реагировать-родной": "0.63.3"
На АНДРОИД:
android/gradle.properties
Изменить версию флиппера:
FLIPPER_VERSION=0.54.0
После этого удалите приложение на устройстве и снова запустите проект. :)
Шаги IOS:
https://react-native-community.github.io/upgrade-helper/ (просто выберите самую последнюю версию RN или используйте 0.63.3)

Может быть, это кого-то спасет. Аналогичная ошибка (не загружать файлы!!!) при любых сетевых запросах. В моем случае проблема была в ssl-сертификате моего https-сервера. Срок действия сертификата истек, что и стало причиной ошибки.

РН: 0,61,5

Я попробовал все, что было предложено в этой теме, и везде искал предложения и ничего. Наконец, я понял проблему. Может быть, это поможет кому-то еще.

На самом деле это была моя вина... Я вызывал средство выбора изображений в дочернем компоненте. Пользователь выбрал там изображения. Нажал сохранить, что вернуло их обратно к предыдущему компоненту. Они заполняли форму, и изображения загружались после заполнения формы.

Проблема заключалась в том, что в дочернем компоненте я назвал ImagePicker.clear() . Он был немного ягодным, и поэтому я не сразу его увидел. Я получил ту же самую «сетевую ошибку, не удалось прочитать файл для uri», которую получили все остальные, поэтому я думаю, что в моем конкретном случае я был очень введен в заблуждение, думая, что произошла какая-то другая проблема.

Думаю, хорошо, что в итоге я обновил нативную версию React, флиппер и Gradle до последней версии. Так вот что. С другой стороны, я потерял 3 дня на это. Программирование странное.

Если кто-то все еще сталкивается с проблемой в версии RN 0.62 или выше, решение:
Вы должны указать uri, имя и тип носителя, который вы загружаете.

formData.append('media_incident', {
          uri: image.path,
          type: image.mime,
          name: 'filename.jpg',
        });

Затем перейдите к строке номер 43 и прокомментируйте эту строку:
builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
в android/app/src/debug/java/com/"имя проекта"/ReactNativeFlipper.java
Я потратил около 8 часов на поиск решения ошибки.

После того, как я попробовал все хаки, описанные выше, этот спас меня. Большое спасибо!

Не работай

Был пропущен какой-то пост в Интернете, в котором говорилось, что часть file:// в пути для Android должна быть удалена, прежде чем устанавливать его в URI для данных формы. Использование пути как есть и удаление builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin)); , как указано выше, у меня сработало для версии 0.62.2 реакции как для Android, так и для ios.

все еще есть проблема, используя RN 0.63.3 flipper 0.54.0, загрузка фотографий проходит нормально, но при загрузке видео возникает сетевая ошибка, я плохо использую другой метод, как сказал @murilokrugner , так как у меня слишком короткий срок

все еще есть проблема, используя RN 0.63.3 flipper 0.54.0, загрузка фотографий проходит нормально, но при загрузке видео возникает сетевая ошибка, я плохо использую другой метод, как сказал @murilokrugner , так как у меня слишком короткий срок

для вас, ребята, если у вас все еще есть эта проблема, у меня есть простые решения:

  1. установите rn-fetch-blob, следуя их инструкциям https://github.com/joltup/rn-fetch-blob
  2. затем следуйте этой инструкции https://github.com/joltup/rn-fetch-blob#multipartform -data-example-post-form-data-with-file-and-data

мой работает хорошо

@abumostafa ты легенда. Большое спасибо.

Любой, кто все еще сталкивается с этой проблемой с 0.63.3 и новейшим флиппером, измените выборку на XMLHttpRequest. Работает отлично.

Все еще сталкиваюсь с той же проблемой, используя :
РН 0.63.3
флиппер 0.54.0

Я прокомментировал строку 43 в android/app/src/debug/java/com/maxyride/app/drivers/ReactNativeFlipper.java.

Все та же проблема, я пробовал почти все, что не работает.

Чтобы поделиться своим решением, нужно декодировать с помощью камеры в base64, а затем отправить на сервер в этом формате. Я крайне разочарован тем, что в 2020 году некоторые крошечные и простые функции, которые продвигаются разработчиками, просто не работают годами.

TLDR: у всех, у кого есть проблемы с отправкой файла, попробуйте преобразовать его в base64 и отправить.

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