如何在没有表单的情况下进行文件上传

47

我的控制器接收到POST数据。这不是由Symfony生成的表单,而是使用FormData的AngularJS自定义表单。

正常的参数可以在请求参数包中正常接收,但我如何获取上传的文件?我需要手动执行与表单的handleRequest相同的操作吗?

我的文档与cookbook文章相同。

所以,我需要从POST请求中获取一个UploadFile对象,以便在文档实体上调用此方法:

public function setFile(UploadedFile $file = null)

如何在Symfony 2中手动接收上传(不以任何方式使用表单构建器)?

1个回答

89

Request有一个FileBag,类似于ParameterBag。因此我可以轻松地获取指定的文件:

所以我可以用以下方式轻松地获得指定的文件:

$data = $this->getRequest()->request->all();
$file = $this->getRequest()->files->get('file');

并且按照食谱使用原始文档:

$document = new Document();
$document->setFile($file);
$lead->setDocument($document);

我该如何设置文件包的内容?我正在使用 https://github.com/kriswallsmith/Buzz/blob/master/lib/Buzz/Browser.php,并且必须发送一个已设置文件包的POST请求。我在我的代码中有fileObj。我使用 is_file() 方法进行了验证。 - Vivek Vardhan
1
你能回答我的问题吗?我也遇到了同样的问题,这是我的问题链接。https://dev59.com/OKLia4cB1Zd3GeqPg02W - numerah
9
$this->getRequest() 在 2.4 版本中已被弃用,并在 3.0 版本中被删除。$request->files->get('filename') 对我起到了作用。 - some_groceries
3
请检查PHP是否接受文件。这里有一些php.ini指令https://www.php.net/manual/en/ini.core.php#ini.sect.file-uploads,例如必须设置为开启的`file_uploads`,或者其他的比如`upload_max_filesize`。 - Xavi Montero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接