创建处理文件上载的控制器

时间:2012-12-20 10:18:08

标签: php symfony

我想创建一个控制器来处理将文件上传到用户特定的文件夹。我目前有一个允许用户上传文件的文件,该文件将发布数据发送给控制器。

我希望控制器做的是获取上传的文件,并将其放在一个文件夹中,例如/public/{username}/files

但我不太确定如何使用symfony来处理它。

2 个答案:

答案 0 :(得分:1)

正如Mahok评论的那样,Symfony2文档在这里很有用。

我会follow them添加额外内容。保存文档时,请传递用户名:

if ($form->isValid()) {
    $em = $this->getDoctrine()->getManager();
    //get the user and pass the username to the upload method
    $user = $this->get('security.context')->getToken()->getUser();
    $document->upload($user->getUsername());

    $em->persist($document);
    $em->flush();

    $this->redirect(...);
}

上传文件时,请使用用户名:

public function upload($username)
{
    if (null === $this->file) {
        return;
    }
    //use the username for the route
    $this->file->move(
        "/public/$username/files/",
        $this->file->getClientOriginalName()
    );

    // set the path property to the filename where you've saved the file
    $this->path = $this->file->getClientOriginalName();

    // clean up the file property as you won't need it anymore
    $this->file = null;
}

以这种方式保存它你实际上不需要使用额外的实体方法,如“getAbsolutePath”等

请注意,如果您接受空格等,则可能必须强制使用用户名。

编辑: 您需要为用户设置文件的oneToMany关系,以便以后可以找到该文件。

答案 1 :(得分:0)

这可能对你有帮助---

$upload_dir = "your upload directory/{username}";           
if (!is_dir($upload_dir)) {
    @mkdir($upload_dir, "755", true);
}
move_uploaded_file($source,$destination);