错误:使用Symfony2在上传文件中找不到“文件”

时间:2016-01-19 12:00:47

标签: php ajax symfony doctrine-orm

我正在尝试在我的应用程序中上传图像以将它们存储在数据库中,并在link之后使用以下代码:

控制器:

public function createAction(Request $request)
{        
    $entity = new Student();
    $form = $this->createCreateForm($entity);
    $form->handleRequest($request);

    if ($form->isValid()) {
       $file = $entity->getPhoto();

       $fileName = md5(uniqid()).'.'.$file->guessExtension();

       $photoDir = $this->container->getParameter('kernel.root_dir').'/../web/uploads/images';

       $file->move($photoDir, $fileName);

       $entity->setPhoto($fileName);

       $em = $this->getDoctrine()->getManager();
       $em->persist($entity);
       $em->flush();

      return $this->redirect($this->generateUrl('student_show', array('id' => $entity->getId())));
    }
    return $this->render('BackendBundle:Student:new.html.twig', array(
        'entity' => $entity,
        'form'   => $form->createView(),
    ));
}

实体:

   use Doctrine\ORM\Mapping as ORM;
   use Symfony\Component\Validator\Constraints as Assert;

   //...
   /**
   * @var string
   *
   * @ORM\Column(name="photo", type="string", length=255, nullable=true)
   * @Assert\File(mimeTypes={ "image/png","image/jpg" })
   */
   private $photo;


   public function setPhoto($photo)
   {
    $this->photo = $photo;

    return $this;
   }

   public function getPhoto()
   {
    return $this->photo;
   }

formtype:

   //...

   ->add('photo', 'file', array('required' => false))

   //...

使用此代码,我收到错误消息:“无法找到该文件”,我不知道如何修复它以保存上传的文件。

更新:我认为错误在于我之前做的ajax请求,它没有正确发送文件字段。如何通过ajax正确发送这种类型的字段?我已经显示了在此字段中发送Ajax请求并且“打开”的值,因此我认为这是问题所在。

解决方案:我已经解决了我的代码更改问题:

  • data: new FormData($(this)[0])代替data: $ (this).serialize()

  • 添加ajax请求:

    processData: false,   contentType: false,   cache: false,

并正确发送文件。

1 个答案:

答案 0 :(得分:0)

约瑟夫

您会错过一些代码:

$form = $this->createForm(new ProductType(), $product);
$form->handleRequest($request);

您的请求数据未与实体绑定,这就是导致错误的原因。请再次检查您获得的链接