在 React Native 上上传照片 Android 产生类型错误网络错误

Photo upload on React Native Android produce Type Error Network Error

我正在使用抓取 API 执行照片上传,我不断收到 Type Error Network Request Error。我在模拟器和设备上收到相同的错误。我使用 react-native-image-crop-picker 作为照片上传数据的来源。有什么想法吗?

const handlePhotoUpload =  async (image: any, token: string) => {

      const { path, filename, mime } = image;

      const uri = path.replace("file://", "")
      const file = {
        uri,            
        type: mime,           
        name: filename             
      };

      const body = new FormData()
      body.append('file', file)

      const config = {
        method: 'POST', 
        headers: { 'Authorization': 'Bearer ' + token },
        body
      };

      return await fetch(`${<API URL>}/user/photo`, config)

}

如果你发送的方式是Android,那么发送方式是错误的。

正确的uri是:

uri: Platform.OS === "android" ? path : path.replace("file://", "")

I faced same issue, it happens in Android, but works well in IOS. I guess this issue about Flipper Network.

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

在此文件中 /android/app/src/main/java/com/{your_project}/MainApplication.java

以下步骤帮助我解决了同样的问题。以防万一,

  1. 在android/app/src/main/java/com/{你的项目}/MainApplication.java 评论以下行:

    initializeFlipper(this, getReactNativeHost().getReactInstanceManager())
    
  2. 在android/app/src/debug/java/com/{你的项目}/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);
         });
    

我知道回复晚了,但对其他人很有帮助

执行以下步骤

在您的项目目录中单击 android 文件夹,然后打开 gradle.properties 并将 fliper 版本更改为此

FLIPPER_VERSION=0.47.0