Загрузка изображения React Native S3 возвращает "Stream Closed" с использованием XHR - PullRequest
2 голосов
/ 05 августа 2020

После обновления версии React Native до последней версии 0.63.2 и попытки загрузить изображение в корзину S3 XHR возвращает ошибку Stream Closed загрузка изображения работала нормально с версией 0.61.5

Код

uploadProfile({ variables: { filetype: mime } }).then(
      ({ data: { uploadUserProfile } }) => {
        const { presignedUrl, url } = uploadUserProfile;

        console.log('presignedUrl', { presignedUrl, url });
        // uploading to s3 bucket
        const xhr = new XMLHttpRequest();
        xhr.open('PUT', presignedUrl);

        xhr.onreadystatechange = async function () {
          if (xhr.readyState === XMLHttpRequest.DONE) {
            if (xhr.status === 200) {
              updateAccount({
                variables: {
                  data: {
                    profile: url,
                  },
                },
              });
            } else {
              if (/Request has expired/g.test(xhr.response))
                Toast({ message: 'slow network connection' });
              else {
                console.log({
                  response: xhr.response,
                  responseText: xhr.responseText,
                  status: xhr.status,
                });
                Toast({ message: 'internal server error' });
                await report({
                  error: {
                    response: xhr.response,
                    responseText: xhr.responseText,
                    status: xhr.status,
                  },
                }); // reporting error
              }
            }
          }
        };

        xhr.setRequestHeader('Content-Type', mime);
        xhr.send({ uri: path, type: mime });

        setLoading(false);
      },
    );

Когда пользователь хочет сначала загрузить изображение профиля, приложение отправляет запрос на сервер и возвращает предварительно подписанный URL-адрес и загружает его со стороны клиента, как это работает приложение.

Ответы [ 2 ]

2 голосов
/ 15 августа 2020

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

Go до 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'
    }

    // ...
}
1 голос
/ 14 августа 2020

обновление версии flipper решает проблему для меня. Если обновление версии flipper не решает для вас, попробуйте это решение.

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

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

38      NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
39      NetworkingModule.setCustomClientBuilder(
40          new NetworkingModule.CustomClientBuilder() {
41            @Override
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

нашел этот ответ ссылка

...