使用阿波罗客户端上传图像时获取网络请求失败反应原生android

Posted

技术标签:

【中文标题】使用阿波罗客户端上传图像时获取网络请求失败反应原生android【英文标题】:Getting Network request failed when uploading images with apollo client react native android 【发布时间】:2021-08-27 16:59:20 【问题描述】:

我正在使用 ApolloClient 发送包含文件(图像)的突变,但我得到了

Error: Network request failed

这是我为创建链接所做的工作

import  createUploadLink  from 'apollo-upload-client' v ==>> "^15.0.0";

const uploadLink = createUploadLink(
        uri: API_URL,
        headers: 
          "Authorization": `Bearer $token`,
          'Content-Type': 'multipart/form-data',
          "Accept":"application/json"
        ,
      );

这个来处理错误

import  onError  from "@apollo/client/link/error"; v ==>> "^3.3.20"

   const errorLink = onError(( graphQLErrors, networkError ) => 
        if (graphQLErrors)
          graphQLErrors.forEach(( message, locations, path ) =>
            console.log(
              `[GraphQL error]: Message: $message, Location: $locations, Path: $path`,
            ),
          );
      
        if (networkError) console.log(`[Network zaid error]: $networkError`);
      );

然后:

const client = new ApolloClient(
        cache: new InMemoryCache(),
        link: from([errorLink,uploadLink]),
        defaultOptions: 
          watchQuery: 
            fetchPolicy: 'cache-and-network',
            errorPolicy: 'none'
          ,
          mutate: 
            mutation: "DocumentNode",
            errorPolicy: 'none'
          ,
        ,
      );

然后我称之为突变:

       await client.mutate(

        mutation:
        gql`  
         mutation($data: PostCreatInput!, $files: [CustomCreateImages!]!) 
           createpost(data: $data, files: $files) 
              id
          `,

        variables: 

          data: ****,

          files:[file:ReactNativeFile]

         
      
      
      ).then(response => 
        console.log(response);
        return response
      ).catch(response => 
        console.log(response);
        return response
      )

我使用了apollo-upload-client生成的ReactNativeFile

          new ReactNativeFile(
            uri:  "file:///storage/***.jpg",
            name: "a.jpg",
            type: "image/jpeg"
          );

我正在使用 react native "react-native": "0.62.2" 我有一个不使用本地主机的实时服务器 我确实检查了服务器日志,这个请求从未离开过手机;服务器上没有记录。

被卡住了一整天,任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

React Native 0.62+ 的错误,它弄乱了多格式请求的配置。可以通过注释掉 android/app/src/debug/java/com/maxyride/app/drivers/ReactNativeFlipper.java 中的第 43 行来修复它:

//builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin)); 

【讨论】:

以上是关于使用阿波罗客户端上传图像时获取网络请求失败反应原生android的主要内容,如果未能解决你的问题,请参考以下文章

网络请求失败对 https 图像上传 Android 做出本机反应

在android上反应本机获取网络请求失败

如何在反应路由器中调用阿波罗客户端 useQuery?

当我们上传图像时,是不是有任何反应原生包可以像 instagram 一样自动裁剪图像?

@apollo/client 反应钩子 useQuery() 数据未定义

反应阿波罗 - 在重新获取之前清除数据对象