当其中一个属性的类型为文件格式时,如何将数组数据追加到 FormData

How to append array data to FormData when the type of one of the properties is in the file format

提问人:Uğur Demirel 提问时间:6/5/2023 更新时间:6/5/2023 访问量:69

问:

我正在使用 formdata 进行文件上传操作...

如何以数组格式加载数据(其中一个属性类型是文件)。

JSON.stringify 不起作用

我如何在控制器端使用它

public class SampleData
{
    public string t { get; set; }
    public HttpPostedFileBase u { get; set; }
    public SampleData() { }
}
public JsonResult Save(FormCollection model, SampleData[] upls) {
  ...
}

示例数据

var data = [{t:"lorem",u: file}, {t:"ipsum",u: file}, { t:"generator", u: file}];

我尝试在下面的 3 个不同结构中附加 formdata,但没有成功

第三个例子的来源

$.each(data, function(index,vs) {
   formdata.append('upls[]', vs); // Sample 1
})

$.each(data, function(index,vs) {
   formdata.append('upls[][t]', vs.t); // Sample 2
   formdata.append('upls[][u]', vs.u);
});

$.each(data, function(index,vs) {
   var f = new Array(); // Sample 3
   f.t = vs.t;
   f.u = vs.u;
   formdata.append('upls[]', f);
});
JavaScript 数组 文件 multipartform-data form-data

评论


答:

0赞 Predator13 6/5/2023 #1

与其直接使用循环来附加数据,不如尝试使用对象循环,如下所示:-

Object.entries(data).forEach(entry => {
      const [key, value] = entry;
      formData.append(key, JSON.stringify(value));
  })

以下是通过循环 formdata 来检查它的方法:-

  for(let [key, value] of formData) {
    alert(`${key} = ${value}`); // key1 = value1, then key2 = value2
  }

完整代码:-

  let formData = new FormData();
  Object.entries(data).forEach(entry => {
      const [key, value] = entry;
      formData.append(key, JSON.stringify(value));
  })
  for(let [key, value] of formData) {
    alert(`${key} = ${value}`); // key1 = value1, then key2 = value2
  }

评论

0赞 Uğur Demirel 6/6/2023
除了 JSON.stringify 之外没有其他解决方案?