将数组数组附加到 FormData 并通过 AJAX 发送

appending array of arrays to FormData and send via AJAX

我需要以多部分形式发送一个数组数组。

let currentObj = this;
let formData = new FormData();
for (var i = 0; i < this.mediaData.length; i++) {
  let file = this.mediaData[i];
  console.log(file, "file");
  formData.append('medias[' + i + ']', , file.file, file.original_file_name, file.function_name);
}
for (var i = 0; i < this.mud_table.name.length; i++) {
  let mud = this.mud_table.name[i];
  formData.append('mud_table[' + i + ']', mud);
}
formData.append('mud_map_status', this.mud.status);
formData.append('mud_map_id', this.mud.id)
formData.append('surveyReportID', this.survey_reporting_id);

使用此代码我只能将文件 属性 从 mediasData 数组发送到控制器中。

mediasData:[function_name:mud_pdf1; original_file_name: recipt_pdf.pdf; file:{File},
function_name:mud_pdf2; original_file_name: recipt_pdf.pdf; file:{File},
function_name:mud_pdf3; original_file_name: recipt_pdf.pdf; file:{File}]

是这种格式,在后端我只在请求中得到 medias:[file:{File}] 格式。 我还需要发送“original_file_name”和“function_name”属性。当然我可以将数组分成 3 个部分并单独附加它们,但是有什么方法可以将每个 mediasData 数组索引的所有属性发送到 formdata 数组各自的索引中?

FormData 允许您在 appending files 时指定 文件名 ,这样应该可以照顾到您的 original_file_name 属性。

formData.append(`medias[${i}]`, file.file, file.original_file_name)

这可以由 $_FILES['medias']['name'][$index] 中的 PHP 或任何相关的 Laravel 抽象来读取。我确定它支持文件名。

至于您的其他字段,您唯一真正的选择是添加一个具有相应索引的新数组。您似乎一直在尝试使用 mediasNames 执行此操作,但它看起来应该更像

formData.append(`mediaFunctionNames[${i}]`, file.function_name)

总结一下

let formData = new FormData();
this.mediaData.forEach((file, i) => {
  formData.append(`medias[${i}]`, file.file, file.original_file_name)
  formData.append(`mediaFunctionNames[${i}]`, file.function_name)
})
this.mud_table.name.forEach((mud, i) => {
  formData.append(`mud_table[${i}]`, mud)
})