Загрузка файла Symfony
Я хотел бы загрузить несколько фотографий в моей форме. На самом деле работает, но только с небольшим размером картинки (вроде меньше 1Мо). Когда я пытаюсь загрузить изображение с 4/5Mo, у меня появляется эта ошибка: файл "" не существует
Я заметил, что это из-за размера, потому что для маленьких изображений это работает очень хорошо.
Итак, мой код: Entity Picture, который связан с Activity:
/**
* @ORM\Column(type="string")
* @Assert\NotBlank(message="Please, upload the product brochure as a PNG, GIF, JPEG or JPG file.")
* @Assert\File(mimeTypes = {"image/png","image/jpeg","image/jpg","image/gif"})
* @Assert\File(maxSize="50M")
*/
private $url;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $legende;
/**
* @ORM\Column(type="datetime")
*/
private $createdAt;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Activity", inversedBy="pictures")
*/
private $activity;
Форма pictureType:
->add('url', FileType::class, array('label' => 'Image (JPG, JPEG, PNG, GIF)'))
и контроллер, в действии создания (форма изображения здесь, когда вы добавляете действие, вы можете добавить одно или несколько изображений)
/**
* @Route("/create_activity", name="create_activity")
*/
public function create_activity(Request $request, ObjectManager $manager){
$activity = new Activity();
$form = $this->createForm(ActivityType::class, $activity);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$pictures = $activity->getPictures(); // On récupère toutes les photos ajoutées
if($pictures){ // S'il y a des photos
foreach ($pictures as $picture ) { // Pour chaque photo
$file = $picture->getUrl(); // On récupère l'url uploadé
// ERROR COMING HERE at $file->guessExtension();
$fileName = $this->generateUniqueFileName().'.'.$file->guessExtension(); // On génère un nom de fichier
// Move the file to the directory where brochures are stored
try {
$file->move( // On l'ajoute dans le répertoire
$this->getParameter('pictures_directory'),
$fileName
);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
$picture->setUrl($fileName);
}
}
$activity->setCreatedAt(new \DateTime());
$activity->setDeleted(0);
$manager->persist($activity);
$manager->flush();
return $this->redirectToRoute('show_activity', ['id' => $activity->getId()]);
}
return $this->render('activity/create_activity.html.twig', [
'formActivity' => $form->createView(),
'activity' => $activity
]);
}
Я сделал много эха; выход;' для знать, где ошибка приходит, и она приходит из "$file->guessExtension();"
Большое спасибо за вашу помощь!
1 ответ
Если твой $file
это пример UploadedFile
(что должно быть в вашем случае), вы можете использовать метод $file->getError()
чтобы узнать, была ли проблема во время загрузки вашего файла.
Этот метод вернет integer
в соответствии с этой документацией: http://php.net/manual/en/features.file-upload.errors.php
В вашем случае, держу пари, у вас будет UPLOAD_ERR_INI_SIZE
ошибка. Чтобы решить эту проблему, вы можете увидеть решение здесь: Изменить максимальный размер загружаемого файла
РЕДАКТИРОВАТЬ
Вот пример для вас:
/** @var UploadedFile $file */
$file = $picture->getUrl();
if (UPLOAD_ERR_OK !== $file->getError()) {
throw new UploadException($file->getErrorMessage());
}