问题描述
我已经构建了一个表单框架来处理 redux 表单并包装字段以使用材料 ui 组件输入。
当我使用 formData() 包装提交数据时,我让表单框架用于发送文件;
这很有效 - 但是当我尝试在 redux 表单中使用字段数组并将文件字段附加到它时 - 它作为键返回服务器 - 代表该字段 - 但内容被列为一个“[object object]”——就像数据已经转换成字符串,无法解码。
--
if(this.props.returnAsFormData){
const formData = new FormData();
for (var field in data) {
if(typeof data[field] !== "object"){
formData.append(field,data[field]);
}
else{
// loop through object
//console.log(field,data[field]);
if(data[field]){
for (var i = 0; i < data[field].length; i++) {
formData.append(field,data[field][i]);
}
}
}
}
data = formData;
}
this.props.submitHandler(data);
--
我试图查看是否只能触摸文件字段才能将其从 FileList 转换为二进制文件 - 但我似乎无法执行与 formData 相同的操作。我试过这样的事情 - 但它只是不像以前那样以二进制文件的形式出现。
function create_binary(file,callback) {
var reader = new FileReader();
reader.onload = function() { callback(reader.result) };
reader.readAsBinaryString(file);
}
x
for (var field in data) {
if(data[field] && typeof data[field] === "object"){
var file = data[field][0];
create_binary(file,function(binary) {
data[field] = binary;
});
}
}
解决方法
这解决了我的问题 --- 需要遍历嵌套的 json 对象。
https://redux-form.com/8.3.0/examples/fieldarrays/ Redux 表单字段数组 - 使 json 更加复杂,因为子字段位于数组对象中 - 因此如果子字段中有文件字段 - 需要在 FormData 中生成 json 输出。
Convert JS Object to form data
{{1}}