React Native iOS端POST请求报错:NSURLError -1000
React Native 0.73.7 iOS端POST请求NSURLError -1000解决办法
问题根源
NSURLErrorDomain -1000大概率是请求体格式不兼容iOS,你的代码里图片URI处理是核心问题:
- iOS对FormData里的文件URI要求极严,非标准
file://格式(比如content://或assets-library://)会直接导致请求体解析失败 - React Native跨平台的URI格式差异没处理好,iOS端的本地文件路径必须是沙箱可访问的标准格式
修复步骤
1. 修正iOS图片URI格式
在把图片添加到FormData前,先处理URI:
import { Platform } from 'react-native'; // ... 你的原有代码 imageUri.forEach((uri, index) => { let fileUri = uri; if (Platform.OS === 'ios') { // 处理iOS特有的URI格式 if (!uri.startsWith('file://')) { // 如果是assets-library开头的URI,转成file://格式 fileUri = uri.replace('assets-library://', 'file://'); } // 要是用的ImagePicker,直接拿它返回的output.uri就行,已经是正确格式 } formData.append('file', { uri: fileUri, name: `photo_${index}.jpg`, type: 'image/jpeg', }); });
2. 别手动设置Content-Type
你的createOffer函数里,绝对不能手动加Content-Type: multipart/form-data!RN会自动生成带正确分隔边界的请求头,手动设置会搞砸解析:
// 以fetch封装为例,正确写法: const createOffer = async (formData) => { return fetch('你的API地址', { method: 'POST', body: formData, headers: { // 删掉所有手动设置的multipart/form-data头! }, }); };
3. 校验请求数据
确保data里的字段都是合法值,避免JSON序列化后出现无效内容:
const data = { price: price ?? 0, registrationPrice: registrationPrice ?? 0, brand: make ?? '', postType: 'SELL', modelYear: year ?? '', carType: bodyType ?? '', mileAge: mileage ?? 0, fuel: fuel ?? '', };
4. 调试技巧
- 在
createOffer里打印请求配置,确认FormData的结构和URI是否正确 - 用Charles抓包,看请求体有没有格式错误
- 先只传
model字段(不带图片),排查是不是图片部分引发的问题
内容的提问来源于stack exchange,提问作者emre varol
相关产品推荐
相关产品推荐

