上载文件时出现symfony 4错误

时间:2018-08-02 15:39:38

标签: php symfony file-upload

我非常尝试按照Symfony's cookbook上的说明上传文件,但是似乎无法正常工作。

具体错误如下,但背景原因是该文件似乎没有(或保持)上传。

  

在字符串上调用成员函数guessExtension()

碰巧的是,该文件是在upload_tmp_dir临时创建的,但是几乎立即被删除(我知道,因为我一直在Finder上看到该目录)。

文件元数据位于以下脚本的var_dump($ _ FILES)命令上。

所以,由于某种原因,文件被丢弃了,我认为这会导致上面看到的特定错误。

我相信$ file(来自UploadedFile)应该这样接收文件,而不是其路径,但不确定如何到达那里。特别是该文件不会保留在upload_tmp_dir上。

有关信息,我在一个普通的PHP项目中尝试了上传,并且效果很好。该文件将保留在upload_tmp_dir中,直到将其移动到其他位置。

谢谢

这是控制器:

class ApiUserXtraController extends Controller
{
public function UserXtraAction(Request $request, ValidatorInterface $validator) {

    $is_logged = $this->isGranted('IS_AUTHENTICATED_FULLY');
    if ($is_logged) {
        $user = $this->getUser();
    }
    $em = $this->getDoctrine()->getManager();
    $repo = $em->getRepository(UserXtra::class);

    $userxtra = new UserXtra();

    $form = $this->createFormBuilder($userxtra)
        ->add('imgFile', FileType::class, array('label' => 'file'))
        ->add('save', SubmitType::class, array('label' => 'Create Task'))
        ->getForm();

    var_dump($_FILES); // outputs file metadata, ie, name, type, tmp_name, size

    $form->handleRequest($request);
    $userxtra->setUser($user);

    if ($form->isSubmitted() && $form->isValid()) { 
        /** 
         * @var UploadedFile $file 
         * */
        $file = $userxtra->getImgFile();
        var_dump('file', $file);// outputs full path to upload_tmp_dir

        $fileName = $this->generateUniqueFileName().'.'.$file->guessExtension(); // **THIS THROWS THE ERROR**

        $file->move(
            $this->getParameter('user_image_directory'),
            $fileName
        );

        $userxtra->setImgFile($fileName);
        //$data = json_decode($data);
        return new JsonResponse(array(
            'status' => 'ok', 
            'is_logged' => $is_logged,
        ));
    }

    return $this->render('upload.html.twig', array(
        'form' => $form->createView(),
    ));

}

2 个答案:

答案 0 :(得分:0)

也许您正在寻找类似

$form->getData('imgFile')->guessExtension();

相反?

编辑:抱歉,您错过了$file = $userxtra->getImgFile();实际上返回了UploadedFile对象的信息。显然,这种假设是不正确的,因为您看到的错误表明它会返回一个字符串。

答案 1 :(得分:0)

我在this SO question上找到了解决方案。

文档或实际上是Symfony的食谱是错误的。

我上面的代码行指出:

  

$ file = $ userxtra-> getImgFile();

应为:

  

$ file = $ form-> get('imgFile')-> getData();