Symfony2如何在没有Doctrine的情况下上传文件?

14

有没有可能在Symfony2中上传文件而不使用Doctrine? 使用Doctrine的示例在此处:http://symfony.com/doc/2.2/cookbook/doctrine/file_uploads.html

是否有一种简单的方法来上传文件,就像在核心PHP中我们有move_uploaded_file()函数,可以在表单提交后移动上传的文件。

目前,当我在Symfony中提交表单时,在请求数组(Symfony\Component\HttpFoundation\Request)的“files”部分中会得到以下内容:

 [files] => Symfony\Component\HttpFoundation\FileBag Object
        (
            [parameters:protected] => Array
                (
                    [upload_cover] => Symfony\Component\HttpFoundation\File\UploadedFile Object
                        (
                            [test:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 
                            [originalName:Symfony\Component\HttpFoundation\File\UploadedFile:private] => secret_of_success.png
                            [mimeType:Symfony\Component\HttpFoundation\File\UploadedFile:private] => image/png
                            [size:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 157958
                            [error:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 0
                            [pathName:SplFileInfo:private] => C:\xampp\tmp\php3636.tmp
                            [fileName:SplFileInfo:private] => php3636.tmp
                        )

                )

        )
1个回答

34
提交表单后,将文件移动到您想要的目录中,您将会得到一个File对象。
foreach($request->files as $uploadedFile) {
    $name = //...
    $file = $uploadedFile->move($directory, $name);
}

请查看API手册以获取此类的详细文档。


谢谢回复,我该如何创建$uploadfile对象,就像这样$uploadfile= new \Symfony\Component\HttpFoundation\File\UploadedFile(); - Rahul
提交表单后,文件将已存在于$request->files;中。因此,您可以循环遍历该数组并移动您首次发送的每个文件。 - devsheeep
如果我使用上面的for循环,似乎只会上传临时文件,我选择了一个png文件进行上传,但在上传目录中,我看到上传的是临时文件,而不是png图像,临时文件的名称为php483.tmp。我有什么遗漏吗? - Rahul
好的,我猜我还需要指定新的文件名以及 $directory。$file = $uploadedFile->move($directory,'test.png'); - Rahul
这个答案是否意味着每个文件都必须有相同的“$name”?以下是可用于获取文件名等的方法。http://api.symfony.com/2.0/Symfony/Component/HttpFoundation/File/UploadedFile.html - Donovan
@Donovan 不是的,答案并不意味着要使用相同的名称,我们可以为每个上传的文件使用不同的名称。 - Rahul

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