javascript
export function tranFormData(params) {
console.log('tranFormData---------------', params);
// 检查输入是否已经是 FormData,如果是,则直接返回
if (params instanceof FormData) {
return params;
}
const formData = new FormData();
/**
* 递归函数,用于将数据添加到 FormData 中
* @param {string} key - 当前处理的数据的键
* @param {*} value - 当前处理的数据的值
*/
const appendToFormData = (key, value) => {
// 如果值是文件或 Blob 对象的数组,则直接追加
if (
Array.isArray(value) &&
value.some(
(file) =>
(file instanceof File) || (file instanceof Blob)
)
) {
value.forEach((file) => {
formData.append(key, file);
});
return;
}
// 如果值是数组,则递归处理数组中的每个元素
if (Array.isArray(value)) {
if (value.length === 0) {
formData.append(`${key}[]`, ''); // 处理空数组的情况
} else {
value.forEach((item, index) => {
// 递归调用,处理数组中的每个元素
appendToFormData(`${key}[${index}]`, item);
});
}
return;
}
// 如果值是对象(但不是 File 或 Blob),则递归处理对象中的每个键值对
if (typeof value === 'object' && value !== null && !(value instanceof File) && !(value instanceof Blob)) {
Object.keys(value).forEach((objKey) => {
if (value[objKey] !== null) {
// 递归调用,处理对象中的每个属性
appendToFormData(`${key}.${objKey}`, value[objKey]);
}
});
return;
}
// 对于所有其他基本类型(字符串、数字、布尔值)以及 File 和 Blob 对象,直接追加
if (value !== null) {
formData.append(key, value);
}
};
// 遍历初始参数对象的每个键,并开始递归处理
Object.keys(params).forEach((key) => {
appendToFormData(key, params[key]);
});
return formData;
}