Expo React Native安卓端FormData图片上传失败,iOS正常求助
安卓端FormData图片上传网络错误修复方案
1. 修正代码变量名错误
代码里的data:formDat是笔误,需改为data:form,变量名不匹配会导致上传数据未正确传递。
2. 移除手动设置的Content-Type
不要手动指定Content-Type为multipart/form-data, application/json,Axios会自动根据FormData生成带正确boundary的multipart/form-data请求头,手动设置会导致安卓端解析异常。修改后的请求头如下:
headers:{ 'Authorization': token, 'accept': 'application/json, text/plain, */*' }
3. 适配安卓端URI格式
安卓端图片URI需调整格式,若通过Expo ImagePicker获取的URI以file://开头,需移除该前缀:
import { Platform } from 'react-native'; // 处理安卓URI const uri = Platform.OS === 'android' ? payload.img.replace('file://', '') : payload.img; form.append('fImage', { uri: uri, type: `image/${fileName.split('.')[fileName.split('.').length - 1]}`, name: fileName })
4. 确保获取安卓文件权限
在Expo项目的app.json中配置权限:
{ "expo": { "android": { "permissions": ["READ_EXTERNAL_STORAGE", "WRITE_EXTERNAL_STORAGE"] } } }
同时在代码中主动请求权限:
import * as ImagePicker from 'expo-image-picker'; async function requestMediaPermission() { const { status } = await ImagePicker.requestMediaLibraryPermissionsAsync(); if (status !== 'granted') { alert('需要授予相册访问权限才能上传图片'); } }
5. 验证服务器请求方式兼容性
部分服务器对PATCH请求的multipart/form-data解析支持不足,可尝试将请求方式改为POST测试是否正常。
内容的提问来源于stack exchange,提问作者Youngsung Choi
相关产品推荐
相关产品推荐

