【问题标题】:React Native Axios upload image return Network Error on AndroidReact Native Axios上传图片在Android上返回网络错误
【发布时间】:2020-04-18 11:08:43
【问题描述】:

我尝试使用Axios 将一些数据(包括图像)上传到服务器。

它在 iOS 上完美运行,但在 Android 上,它返回 Network Error

const data = new FormData();
        data.append('tag', tag.METHOD_TAG_UPLOAD_PHOTO);
        data.append('app_version', 1);
        data.append('os_type', tag.OS_TYPE);
        data.append('store_code', kodetoko);
        data.append('photo', {
            uri: image_picked.uri,
            type: 'image/jpeg',
            name: judul + ".jpg"
        });

我试图在别处寻找解决方案,他们说问题在photo的对象的type内,它需要使用image/jpeg类型。我正在使用它,但它仍然返回 Network Error。请帮忙。

【问题讨论】:

  • 如果你在url中使用localhost,它可以在ios上运行,但不能在android上运行,你应该为android指定服务器地址
  • @MahdiN 我没有使用 localhost 作为 url。我用IP。其他请求也可以正常工作(获取、发布无图像等)

标签: android react-native axios


【解决方案1】:
  1. 打开这个目录'android/app/src/debug/java/com/flatApp/ReactNativeFlipper.java'

  2. 按照以下代码注释该行:

      NetworkingModule.setCustomClientBuilder(
       new NetworkingModule.CustomClientBuilder() {
         @Override
         public void apply(OkHttpClient.Builder builder) {
           // builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
         }
       });
    

【讨论】:

  • 这对我不起作用,尝试按照下面的建议将我的 FLIPPER_VERSION 升级到 0.41.0。
【解决方案2】:

我遇到了同样的问题,接受的答案对我不起作用。以下是对我有帮助的。

  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. 图片上传代码:

    var formData = new FormData();
       formData.append('UserId', 'abc@abc.com');
       formData.append('VisitId', '28596');
       formData.append('EvidenceCapturedDate', '09/10/2019 13:28:20');
       formData.append('EvidenceCategory', 'Before');
       formData.append('EvidenceImage', {
         uri: Platform.OS === 'android' ? `file:///${path}` : `/private${path}`,
         type: 'image/jpeg',
         name: 'image.jpg',
       });
       axios({
         url: UrlString.BaseUrl + UrlString.imageUpload,
         method: 'POST',
         data: formData,
         headers: {
           Accept: 'application/json',
           'Content-Type': 'multipart/form-data'
         },
       })
         .then(function (response) {
           console.log('*****handle success******');
           console.log(response.data);
    
         })
         .catch(function (response) {
           console.log('*****handle failure******');
           console.log(response);
         });
    

【讨论】:

  • Platform.OS === 'android' ? file:///${path} 工作正常。谢谢
【解决方案3】:

FLIPPER_VERSION=0.41.0

更新您的 Flipper_Version 或等于 = 0.41.0

【讨论】:

    【解决方案4】:

    我遇到了这个问题,我猜这个问题是关于 Flipper Network 的。

    有一段时间,我评论了 initializeFlipper(this, getReactNativeHost().getReactInstanceManager())

    在这个文件/android/app/src/main/java/com/{your_project}/MainApplication.java

    现在一切正常

    【讨论】:

      【解决方案5】:

      这应该在版本 0.39.0 中得到修复。要升级,请编辑 android > gradle.properties

      #用于 React Native 的 Flipper SDK 版本

      FLIPPER_VERSION=0.39.0  // edit this manually
      

      【讨论】:

      【解决方案6】:

      我也遇到过这个问题,以上都没有帮助。 Android 对多部分/表单数据的文件上传非常具体。如果您有任何文件参数错误,它将失败并显示“网络错误”并且没有其他信息,这非常令人沮丧!

      为了让我的工作,我从以下示例开始(来自 Expo,但这里没有特定于 Expo):https://github.com/expo/examples/blob/d86f50a710e3805494b458fae2595502d9afa7bc/with-formdata-image-upload/App.js

      我建议也从这个开始,并在此行尝试一些不同的东西:where the file information is set for the requedst。我只针对我的问题修改了这个示例 axios 而不是 fetch

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-10
        • 2020-03-07
        • 1970-01-01
        • 2020-10-22
        • 2019-03-26
        • 2021-01-29
        • 1970-01-01
        • 2020-02-04
        相关资源
        最近更新 更多