在 expo/react-native 中发送图像时随机出现“错误处理请求正文”

Posted

技术标签:

【中文标题】在 expo/react-native 中发送图像时随机出现“错误处理请求正文”【英文标题】:"Error processing request body" occurs randomly when sending image in expo/react-native 【发布时间】:2020-04-02 14:30:52 【问题描述】:

我最近在使用我正在开发的应用程序的 ios 版本时遇到问题。通常在将图像发送到服务器时(使用组件 expo-image-picker 选择),它会返回错误:

Error procession request body: Error Domain=ABI34_0_0RCTErrorDomain Code=0
"Invalid request token"
UserInfo=NSLocalizedDescription=Invalid request token.

这是发送数据的方法:

alterUserDataOnDatabase(formValues, callback) 
        fetch(url , 
            method: 'POST',
            headers: 
                Accept: 'application/json',
                'Content-Type': 'multipart/form-data',
            ,
            body: formValues
        )
          .then(response => response.json())
          .then(responseJson => callback(responseJson));

这是使用图像选择器获取图像本身的代码

_pickImage = async () => 
        const 
            status: cameraRollPerm
         = await ImagePicker.getCameraRollPermissionsAsync();
        //await Permissions.getAsync(Permissions.CAMERA_ROLL);

        // only if user allows permission to camera roll
        if (cameraRollPerm === 'granted') 
            try 
                let pickerResult = await ImagePicker.launchImageLibraryAsync(
                    allowsEditing: true,
                    aspect: [4, 4],
                );

                this._handleImagePicked(pickerResult);
             catch (e) 
                console.log(e)
            
        
;

_handleImagePicked = async pickerResult => 
        try 
            this.setState(
                uploading: true
            );

            if (!pickerResult.cancelled) 
                let uri = pickerResult.uri;
                let uriParts = uri.split('.');
                let fileType = uriParts[uriParts.length - 1];

                this.form.append('photo', 
                    uri: uri,
                    name: `photo.$fileType`,
                    type: `image/$fileType`,
                );

                this.setState(
                    image: uri
                );
            
         catch (e) 
            console.log( e );
            alert('Upload failed, sorry :(');
         finally 
            this.setState(
                uploading: false
            );
        
;

我在它的 34 版本中使用 expo 和 react-native,我已经尝试到 36 版本,但它没有做任何事情,错误只是从 ABI34 更改为 ABI36。

错误只是偶尔发生,这是奇怪的部分,它似乎是随机发生的,但通常,在发送一张图像后,下一张会返回错误,虽然有时它会在我第一次尝试发送时发生.

有人知道这个错误吗,我很难找到答案。

编辑:我尝试在 expo 上创建新的空应用程序,代码和包适用于新应用程序,但它似乎无法与所有内容一起使用。

【问题讨论】:

【参考方案1】:

我已经找到解决方法了。

在将数据发送到服务器之前,我使用this.setState() 在应用程序中启动动画,因此用户在发送数据后无法按下按钮(为此,我使用了组件'react -native-loading-spinner-overlay')。

出于某种我无法辨别的原因,将框架中的状态更新为发送带有图像的表单会导致此错误。为了解决这个问题,我简单地将向服务器发送数据的方法放在 setTimeout 上,并让它在发送前等待 100 毫秒。

【讨论】:

以上是关于在 expo/react-native 中发送图像时随机出现“错误处理请求正文”的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 上减小 expo/react-native 应用程序的大小

如何在 expo/react-native 应用程序中添加自定义节点模块?

对象不是 Expo(react-native) 应用程序中的函数

如何使用搜索文本输入(expo、react-native)在屏幕上显示项目

expo React-native 数据未呈现但登录控制台

Expo react-native 将无法连接到 socketio(Android 和 iOS)