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

使用RTK Query上传图片至Cloudinary时出现400错误求助

问题解决:RTK Query上传图片返回400错误及乱码

核心问题

你在prepareHeaders里手动设置了content-Type: multipart/form-data,但发送FormData时,浏览器会自动生成包含boundary的正确Content-Type头(比如multipart/form-data; boundary=----WebKitFormBoundaryxxxx),手动设置会丢失boundary参数,导致后端无法正确解析表单数据,进而返回400错误,同时乱码是请求格式错误引发的响应异常。

解决方案步骤

  • 移除手动设置的Content-Type
    修改uploadImgApi.js中的prepareHeaders部分,删掉手动设置content-Type的代码:

    prepareHeaders: (headers, { getState, endpoint }) => {
      const { token } = getState().user;
      if (token) {
        headers.set("Authorization", `${token}`);
        // 移除下面这行手动设置的代码
        // headers.set("content-Type", "multipart/form-data");
      }
      return headers;
    },
    
  • 检查后端multipart解析配置
    后端Express需要使用multer中间件处理multipart/form-data请求,确保配置正确:

    const multer = require('multer');
    const upload = multer({ dest: 'uploads/' }); // 也可配置直接对接Cloudinary
    
    // 路由示例
    app.post('/upload/upload_avatar', upload.single('file'), async (req, res) => {
      // 执行上传到Cloudinary的逻辑
      const result = await cloudinary.uploader.upload(req.file.path);
      res.json({ url: result.secure_url });
    });
    
  • 验证Cloudinary初始化配置
    确保后端已正确初始化Cloudinary SDK,配置好云名称、API密钥等参数:

    const cloudinary = require('cloudinary').v2;
    cloudinary.config({
      cloud_name: '你的云名称',
      api_key: '你的API密钥',
      api_secret: '你的API密钥'
    });
    

补充说明

发送FormData时无需手动设置Content-Type,fetch(包括RTK的fetchBaseQuery)会自动处理该请求头,添加正确的boundary信息,这是表单文件上传的标准行为。

内容的提问来源于stack exchange,提问作者Sachin Desai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:52:36