React Native POST 请求转换为 GET 请求

问题描述 投票:0回答:1

我使用的是Android模拟器sdk33。我正在尝试将图像从我的 React Native 应用程序上传到我的服务器,该服务器能够处理图像上传。我正在使用 expo-image-picker 从用户那里获取图像。当我发送带有文件数组主体的 post 请求时,我收到一条错误消息:

 [TypeError: Body not allowed for GET or HEAD requests]
这会导致根本不会调用我的服务器。

我在此应用程序中向我的服务器发出了其他 GET 和 POST 请求,因此我知道我的 API 不是问题。

这是我的按钮“上传图像”调用的函数,它应该执行发布请求和所有操作。

    const uploadPhoto = async () => {

        try{
            await ImagePicker.requestMediaLibraryPermissionsAsync()
            let files = await ImagePicker.launchImageLibraryAsync({
                mediaTypes: ImagePicker.MediaTypeOptions.Images,
                quality: 1,
                allowsMultipleSelection: true
            })
    
            if (!files.canceled) {
                const filelist = new FormData();
                for (let i = 0; i < files.length; i++) {
                  filelist.append("photos", files[i].assets[0].uri);
                }

                const res = await fetch(`${API}/ad/upload`, {
                    headers: {
                        'method': 'POST',
                        'Content-type': 'multipart/form-data',
                        Authorization: `Bearer: ${user.token}`
                    },
                    body: {filelist}
                })

                console.log(res)
              }
        } catch(err) {
            console.log(err)
        }
      };

值得注意的是,axios post 也会发生同样的事情 - 我只是收到一个简单的“网络错误”消息。

react-native http
1个回答
0
投票

可能是因为你的

headers
。尝试将
method
从标题中移出,如下所示:

const res = await fetch(`${API}/ad/upload`, {
    method: 'POST',
    headers: {
        'Content-Type': 'multipart/form-data',
        'Authorization': `Bearer ${user.token}`
    },
    body: filelist
});

另外,我认为你需要直接传递

filelist
,因为它是表单数据。

© www.soinside.com 2019 - 2024. All rights reserved.