【问题标题】:Handling plupload file uploads in Symfony 2在 Symfony 2 中处理 plupload 文件上传
【发布时间】:2013-08-14 18:18:58
【问题描述】:

我正在尝试编写一个控制器来接受来自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。但是,我不知道如何处理实际文件并将其移动到目录中。

我在$_POST 上做了一个var_dump(),它只返回以下内容:

array(1) {
  ["name"]=>
  string(21) "wallpaper-2873928.jpg"
}

上传肯定会被发送,因为我可以看到文件的字节是使用开发人员工具的请求有效负载的一部分。我是否需要使用 Symfony 自己的组件来处理上传?如果是这样,怎么做? Symfony 文档似乎只涵盖从文件上传表单上传。

【问题讨论】:

  • 像普通上传一样处理,插件应该像表单上传一样推送文件。

标签: php symfony file-upload plupload


【解决方案1】:

首先,尝试使用 Symfony2 的方式访问请求参数。您可以在book获取更多信息。

上传文件时,Symfony2 会自动为您创建一个UploadedFile 的实例,并将其放入请求对象中的FileBag 中。

您可以像这样访问控制器中的文件:

$files = $request->files;

如前所述,这些是临时文件。要将它们上传到用户定义的目录,请在对象上使用move 方法。

$directory = //...

foreach ($files as $uploadedFile) {
    $name = //...
    $file = $uploadedFile->move($directory, $name);
}

变量$files 现在包含File 的一个实例。


另一方面,您也可以使用支持 Plupload 上传器的捆绑包。我推荐OneupUploaderBundle。 (注意:我是这个bundle的主要开发者,我想这个需要添加)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 2012-11-08
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    相关资源
    最近更新 更多