diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkEventUtil.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkEventUtil.kt index 781f25d7137e..8965f140ef6f 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkEventUtil.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkEventUtil.kt @@ -19,6 +19,7 @@ import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags import java.io.IOException import java.net.SocketTimeoutException import okhttp3.Headers +import okhttp3.MultipartBody import okhttp3.RequestBody import okio.Buffer @@ -263,6 +264,13 @@ internal object NetworkEventUtil { return "[Preview unavailable]" } + // MultipartBody does not propagate isOneShot() from its parts, so check each + // part explicitly. Reading a one-shot part here would drain the underlying + // stream and cause the real request to fail. + if (body is MultipartBody && body.parts().any { it.body().isOneShot() }) { + return "[Preview unavailable]" + } + return try { val buffer = Buffer() body.writeTo(buffer) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/RequestBodyUtil.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/RequestBodyUtil.kt index 3fa7e6aa51ef..eb111d312ac2 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/RequestBodyUtil.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/RequestBodyUtil.kt @@ -146,6 +146,8 @@ internal object RequestBodyUtil { } } + override fun isOneShot(): Boolean = true + @Throws(IOException::class) override fun writeTo(sink: BufferedSink) { var source: Source? = null