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

React Native调用Zamzar API的Axios Post请求报422错误求助

解决React Native调用Zamzar API出现422错误的方案

错误原因分析

422状态码表示请求格式或数据不符合API要求,你的代码存在以下问题:

  • 文件路径无效:直接传递相对路径../assets/ok.jpg无法被Zamzar API识别,React Native中需要传递文件的有效URI及完整文件信息
  • 请求体格式错误:Axios请求时将formData包裹在对象中传递,导致实际发送的不是正确的multipart/form-data格式数据

具体修复步骤

1. 正确构造FormData(处理本地文件)

在React Native中,无法直接通过相对路径读取assets文件,需要先获取文件的URI并构造符合要求的文件对象。以下分两种环境给出示例:

Expo环境(使用expo-file-system)

import * as FileSystem from 'expo-file-system';

// 获取assets中图片的URI
const getAssetUri = async () => {
  const assetInfo = await FileSystem.getInfoAsync(require('../assets/ok.jpg').uri);
  return assetInfo.uri;
};

// 构造FormData
const buildFormData = async () => {
  const formData = new FormData();
  formData.append('target_format', 'png');
  
  // 获取文件URI并构造文件对象
  const fileUri = await getAssetUri();
  formData.append('source_file', {
    uri: fileUri,
    type: 'image/jpeg', // 文件对应的MIME类型
    name: 'ok.jpg' // 文件名
  });
  
  return formData;
};

原生React Native环境(使用react-native-fs)

import RNFS from 'react-native-fs';
import { Image } from 'react-native';

// 获取assets中图片的URI
const getAssetUri = () => {
  const asset = Image.resolveAssetSource(require('../assets/ok.jpg'));
  return asset.uri;
};

// 构造FormData
const buildFormData = () => {
  const formData = new FormData();
  formData.append('target_format', 'png');
  
  const fileUri = getAssetUri();
  formData.append('source_file', {
    uri: fileUri,
    type: 'image/jpeg',
    name: 'ok.jpg'
  });
  
  return formData;
};

2. 修复Axios请求调用

直接将FormData实例作为请求体传递,不要包裹在对象中,Axios会自动识别FormData并设置正确的multipart/form-data请求头:

const startUpload = async () => {
  try {
    const formData = await buildFormData();
    const res = await axios.post(url, formData, {
      auth: {
        username: token, // 你的Zamzar API密钥
        password: ''
      }
    });
    console.log(res);
  } catch (err) {
    console.error(err);
  }
};

3. 额外验证要点

  • 确认token是有效的Zamzar API密钥,可在Zamzar开发者控制台查看
  • 可以通过抓包工具(如Charles)对比Postman和App的请求内容,确保请求头、FormData结构完全一致
  • 若仍有问题,检查文件的MIME类型是否正确,文件名是否符合API要求

内容的提问来源于stack exchange,提问作者Maiya Miya Miya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:00:46