我正在尝试在我的应用程序中上传图像以将它们存储在数据库中,并在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,
并正确发送文件。
答案 0 :(得分:0)
约瑟夫
您会错过一些代码:
$form = $this->createForm(new ProductType(), $product);
$form->handleRequest($request);
您的请求数据未与实体绑定,这就是导致错误的原因。请再次检查您获得的链接