繁体   English   中英

将数组数组附加到 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允许您在附加文件时指定文件名,以便处理original_file_name属性。

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

这可以由 PHP 在$_FILES['medias']['name'][$index]或任何相关的 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)
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM