symfony + AJAX如何上传嵌入在javascript JSON对象中的文件?

时间:2019-05-11 20:15:58

标签: ajax symfony

我有一个客户端上传嵌入在JSON对象中的文件,因为这些文件中的每一个都附加了元数据。

问题是我不知道它们将上传多少文件,所以我需要动态的东西

目前,我有一个fileList javascript对象,其中包含如下所示的子对象:

{
  file1: null
  meta1: null,
  meta2: null,
  etc...
}    
{
  file2: null
  meta1: null,
  meta2: null,
  etc...
}

我这样上传:

formData.append('files', this.fileList);

但是在symfony中,我不知道如何处理这种特殊情况

如果我在探查器中查看,则会得到类似以下内容: files "[object Object],[object Object]"

$files = $request->files->get('files');给出null

还有另一种解码数据的方法吗?它在那里,但我看不懂:(

1 个答案:

答案 0 :(得分:0)

如果您要上传一个文件,每个元数据行一个,那么当我使用Ajax形式(我喜欢BlueImp,但还有其他文件)选择该文件时,我会分别发送该文件并将其粘贴到目录(使用清理脚本,该脚本会在24小时后删除它们,S3很好地做到了这一点)。然后将该路径返回到表单,将其放入您提交的JSON格式的正文中,然后获得您的元数据,该元数据恰好包含其待处理的文件路径。在提交时移动待处理文件,并在保存行或其他内容时保留该新引用。瞧!

所以:

files[][filename].onchange: [/* Upload file to pending, return pending path */]

使用返回路径pending/ad32sY3KJ.png,提交

"files": [
    ["file":"`pending/ad32sY3KJ.png`","meta1":"Root Beer"],
    ["file":"`pending/34dks3DWf.png`","meta1":"Cat"]
]

然后,您的路由器处理程序具有一个数组,因此Content-type: application/json可以正常工作,尽管您可以使用:

$body = \json_decode($request->getContent(), true);

相反。