我正在尝试编写一个控制器来接受来自Plupload插件的文件上传。作为一个额外的乐趣,上传来自不同的URL,所以我必须自己设置Access-Control-Allow-Origin
标题。到目前为止,我已经这样做了:
/**
* @Route("/frontEnd/file/upload.{_format}")
*/
public function upload(Request $request) {
$response = new Response();
$response->setContent(json_encode(array('hello' => 'world')));
$response->setStatusCode(200);
$response->headers->set('Access-Control-Allow-Origin', '*');
$response->send();
}
似乎有用。当我使用plupload提交上传时,我看到XHR请求命中Symfony并返回JSON。但是,我不知道如何处理实际文件并将其移动到目录中。
我在var_dump()
上做了$_POST
,但它只返回了以下内容:
array(1) {
["name"]=>
string(21) "wallpaper-2873928.jpg"
}
上传肯定是发送的,因为我可以看到文件的字节是开发人员工具的请求有效负载的一部分。我是否需要使用Symfony自己的组件来处理上传?如果是这样,怎么样? Symfony文档似乎只涵盖从文件上传表单上传。
答案 0 :(得分:2)
首先,尝试使用Symfony2方式访问请求参数。您可以在book。
中获取更多信息上传文件时,Symfony2会自动为您创建UploadedFile的实例,并将其放在请求对象的FileBag中。
您可以像这样访问控制器中的文件:
$files = $request->files;
如前所述,这些是临时文件。要将它们上载到用户定义的目录中,请在对象上使用move
方法。
$directory = //...
foreach ($files as $uploadedFile) {
$name = //...
$file = $uploadedFile->move($directory, $name);
}
变量$files
现在包含File的实例。
另一方面,您也可以使用支持Plupload上传器的软件包。我推荐OneupUploaderBundle。 (注意:我是这个软件包的主要开发人员,我想这需要添加)。