1

我有那个表格(扩展AbstractType):

public function buildForm(FormBuilderInterface $builder, array $options)
{
  $builder
    ->add('files', FileFieldType::class, [
      'label' => 'Files',
      'multiple' => true]
    );
}

前端中的这个小表单(ReactJS):

 <form onChange={onChange} ref={node => form = node}>
   <input type="file" multiple={multiple} name="file[files]" />
 </form>

我触发了上传,会发生以下情况:

const data = new FormData(form); 

fetch('/upload', {
  method: 'POST',
  headers: {
    'Content-Type': 'multipart/form-data'
  },
  body: data
});

但是在服务器上没有文件到达,所以在控制器中:

$request->files->all(); //[]

因此该表格也永远无效。

在功能测试中,我正在使用这个:

$client->request('POST', '/upload', [], ['file' => ['files' => $file]]);

where$file指的是类型的对象UploadedFile。那行得通,那么这里的错误是什么?

4

1 回答 1

1

正如我在这个答案中找到的那样:

基本思想是每个部分(由与 -- 边界的字符串分割)都有自己的标题(例如,第二部分中的 Content-Type。)FormData 对象为您管理所有这些,因此它是一种更好的方法来完成我们的目标。

因此,为了使上传工作,我需要content-type从标题中删除并将输入字段重命名为:file[files][]

于 2017-03-21T10:45:11.527 回答