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

如何通过FormData上传包含额外信息的多文件对象数组?

问题原因
  • FormData的append()方法仅支持传入字符串、Blob、File三类值作为第二个参数,你直接传入普通对象时,JS会自动调用toString()方法转换对象,最终存入FormData的是[object Object]字符串,完全丢失了文件和自定义属性的实际内容,这是请求异常的核心原因。
  • 你手动设置了Content-Type: multipart/form-data请求头,但是缺少了必要的boundary分隔符参数,会导致后端无法正常拆分解析表单字段。axios会自动识别传入的FormData对象,自动生成带正确boundary的请求头,无需手动设置。
修复代码

页面逻辑代码修改

import api from './api';

const formData = new FormData();
const files = this.$refs.photo.files;

if (files.length > 0) {
  for (let i = 0; i < files.length; i++) {
    // 按索引传递文件
    formData.append(`files[${i}][file]`, files[i]);
    // 按索引传递对应文件的关联属性
    formData.append(`files[${i}][someOtherProp]`, 'value');
  }
}
// 其他业务参数也可以直接append
formData.append('articleTitle', '示例文章');

api.createArticle(formData);

api封装代码修改

// api/index.js
import axios from 'axios';
import config from '@/config';

const api = axios.create({
  baseURL: config.api,
  timeout: config.apiTimeout,
});

function createArticle(payload) {
  // 删除手动设置的Content-Type,交由axios自动处理
  return api.post('/articles', payload);
}

export {
  createArticle
};
验证方法

修改完成后可以通过如下代码打印FormData内容,确认传值是否正确:

for (let [key, value] of formData.entries()) {
  console.log(key, value);
}

你之前请求的异常截图如下:
请求结果截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:00:00