You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native下axios+redux saga传FormData后端req.file为空如何解决

问题原因及修复方案
  • FormData追加文件的参数格式错误
    React Native环境下向FormData中追加文件时,不能直接传入文件uri字符串,需要传入包含uri、文件类型、文件名的标准文件对象,后端才能识别为文件字段而非普通字符串字段。
    正确的append写法如下:
    data.append('file', {
      uri: uri,
      type: 'image/jpeg', // 可根据实际文件类型调整,比如png对应image/png
      name: 'avatar.jpg' // 自定义上传后的文件名
    });
    
  • 手动设置了错误的Content-Type请求头
    multipart/form-data请求头必须附带随机生成的boundary分隔符参数,后端才能正确拆分表单里的普通字段和文件字段。你手动写死的请求头没有携带boundary参数,会导致后端无法正常识别文件字段,最终把文件内容当成普通表单字段存入req.body。
    直接删除手动设置的headers即可,绝大多数常用请求库(axios、fetch等)检测到请求体为FormData实例时,会自动生成携带正确boundary的multipart/form-data请求头。

修改后的完整代码

// react native code
export function* uploadFile({ payload }) {
  const { uri } = payload.data;

  try {
    const data = new FormData();
    data.append('file', {
      uri: uri,
      type: 'image/jpeg',
      name: 'avatar.jpg'
    });
    // 移除手动设置的Content-Type,由请求库自动生成
    const response = yield call(api.post, '/upload', data);
    yield put(fileUploadSuccess(response.data));
  } catch (error) {
    yield put(fileUploadFailure());
  }
}

内容的提问来源于stack exchange,提问作者Victor Henrique

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:54:04