如何使用 FormData 发送文件数组?

Posted

技术标签:

【中文标题】如何使用 FormData 发送文件数组?【英文标题】:How to send an array of files using FormData? 【发布时间】:2021-11-05 16:01:15 【问题描述】:

在 laravel 的后端,我有一个名为“file_ticket”的字段,我需要发送一个包含通过输入文件发送的文件的数组,我在前端使用 vue js。 如何将此数组发送到我的后端?当我尝试仅发送数组时,请求会返回类似“目标文件”的内容

result image

onChange(e) 
  let getFiles = [...this.$refs.file.files]
  
  if(!getFiles) return
  ([...getFiles]).forEach(f => 
    this.filelist.push(f)
  )      
,


saveTicket(event)
  event.preventDefault()      
               
  let frmData =  new FormData()
  frmData.append('subject', this.newTicket.subject) 
  frmData.append('service', this.newTicket.service) 
  frmData.append('description', this.newTicket.description)       
  frmData.append('file_ticket', this.filelist)       
  frmData.append('client_id', this.idUser) 


  const url = `ticket/new_ticket`

  axios.post(url, frmData).then((response) => 
    console.log(response)
  )

【问题讨论】:

使用 JSON。在服务器端使用json_decode。在客户端使用 JSON.stringify([1, 2, 3]);,其中 [1, 2, 3] 是您的数组。 @Someone_who_likes_SE 我认为你做不到。我很确定你必须使用FormData() 我是说,以表单数据的形式发送字符串化的 JSON 如果我使用 JSON.stringy(),发送一个包含空对象的数组 【参考方案1】:

只需使用相同的键将filelist 中的所有文件附加到formdata,它就会发送一个文件数组。

this.filelist.forEach((file) => 
    frmData.append('file_ticket', file);
);

【讨论】:

以上是关于如何使用 FormData 发送文件数组?的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery.ajax 发送 multipart/formdata

如何使用 formdata 将图像文件发送到 React/Next js api?

如何从字符串创建文件并通过 FormData 发送

如何将带有附加数据的 FormData 文件发送到 asp.net web api ajax 调用

如何在 Flask 中接受通过 ajax 发送的 FormData?

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