2016-12-14 8 views
1

Ich benutze Symfony 3.2 und ich baue mein Formular mit Dateifeld, das nur jpg, jpeg, gif und png Erweiterungen akzeptiert. Leider kann ich kein Bild mit der Erweiterung .jpg hochladen, obwohl ich den Bild-/JPEG-Mime-Typ in erlaubten Mime-Typen erwähnt habe. Der Fehler "mimeTypesMessage" wird angezeigt.Ich kann kein JPG-Bild in mein Formular hochladen

Ich wäre dankbar, wenn Sie einen Blick darauf werfen würden.

Dank

ImageType.php

/** 
* Defines the form used to create and manipulate images. 
* 
* @author XXX 
*/ 
class ImageType extends AbstractType { 

    /** 
    * Main function of the class. 
    * 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) { 

     $builder 
       ->add('title', TextType::class, array(
        'label' => 'Tytuł', 
        'constraints' => [ 
         new Length([ 
          'min' => 3, 
          'max' => 128, 
          'minMessage' => 'Tytuł musi posiadać minimum 3 znaki.', 
          'maxMessage' => 'Tytuł może zawierać maksymalnie 128 znaków.', 
         ]), 
        ], 
       )) 
       ->add('file', FileType::class, array(
//     'mapped' => false, 
        'constraints' => [ 
         new Image([ 
          'maxSize' => '2M', 
          'maxSizeMessage' => 'Maksymalny rozmiar obrazka wynosi 2 MB. Wgraj mniejsze zdjęcie.', 
          'mimeTypes' => ['image/jpeg,', 'image/pjpeg', 'image/png', 'image/gif'], 
          'mimeTypesMessage' => 'Nieobsługiwany format pliku. Dozwolone rozszerzenia obrazków to: jpg, gif, png.', 
          'uploadErrorMessage' => 'Dodawanie obrazka zakończyło się niepowodzeniem.', 

          'minWidth' => 1000, 
          'minWidthMessage' => 'Minimalna szerokość obrazka to px', 
          'minHeight' => 1000, 
          'minHeightMessage' => 'Minimalna wysokość obrazka to px', 
          'maxWidth' => 1100, 
          'maxWidthMessage' => 'Maksymalna szerokość obrazka to px', 
          'maxHeight' => 1100, 
          'maxHeightMessage' => 'Maksymalna wysokość obrazka to px', 
         ]), 
        ], 
       )) 
       ->add('source', TextType::class, array(
        'label' => 'Źródło', 
        'required' => false, 
       )) 
       ->add('reset', ResetType::class, array(
        'label' => 'Reset' 
       )) 
       ->add('submit', SubmitType::class, array(
        'label' => 'Zapisz' 
       )) 
       ; 
    } 

    /** 
    * Configures form options. 
    * 
    * @param OptionsResolver $resolver 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults([ 
      'data_class' => Object::class, 
     ]); 
    }  

} 

ObjectController.php

public function addImageAction(Request $request) { 

    $object = new Object(); 

    // create form with multiple buttons 
    $form = $this->createForm(ImageType::class, $object) 
      ->add('saveAndCreateNew', SubmitType::class); 

    // fill the object by values from the form (if submitted) 
    $form->handleRequest($request); 

    if ($form->isSubmitted() && $form->isValid()) { 

     $file = $object->getFile(); 

     if(!$file->getError()) { 
      $ext = $file->guessExtension(); 
      if ($ext == 'jpeg') { 
       $ext = 'jpg'; 
      } 

      $object->setName(md5(uniqid()) . '.' . $ext); 
      $object->setFile($file->getClientOriginalName()); 
      $object->setFormat($file->getMimeType()); 


     } else { 
      $this->addFlash('danger', 'Wystąpił nieznany błąd w przesyłaniu formularza. Spróbuj ponownie.'); 
      return $this->redirectToRoute('app_object_addimage'); 
     } 

// rest of form handling... 

Was mir fremd ist, image/jpeg Mime-Typ nicht auf der IANA-Seite aufgeführt ist (http://www.iana.org/assignments/media-types/media-types.xhtml). Leider habe ich die Problemlösung noch nicht im Internet gefunden.

+0

Überprüfen Sie die enctype. Es muss mutiPart sein – Carlos

+0

Haben Sie versucht, .png-Dateien hochzuladen? Vielleicht ist das Problem, dass Ihr Formular keine Datei-Uploads erlaubt? – Merv

+0

Jungs, es gibt keine Probleme mit PNG-und Gif-Dateien –

Antwort

1

wie der Grund des Problems sieht nur ein kleiner Tippfehler ist. Ein falsch gesetztes Komma eingefügt:

'mimeTypes' => ['image/jpeg,', 'image/pjpeg', 'image/png', 'image/gif'],

0

Verwenden Sie Bild anstelle von Datei. Es akzeptiert standardmäßig alle Bildtypen und soll für JPG/JPEG arbeiten:

http://symfony.com/doc/current/reference/constraints/Image.html#mimetypes

+1

Was meinst du mit Bild statt Datei? Ich verwende "FileType", um mein Formular zu erstellen, da es für diese Zwecke keine ImageType-Klasse gibt. Der Link, den Sie angegeben haben, dient zur Formularvalidierung und ich verwende ihn bereits –

0

ich das gleiche Problem mit $file->guessExtension() haben und kann keine Lösung, genau wie Sie.

Bis ich fand $file->guessClientExtension() Funktion here und es funktioniert für mich nach dem Austausch mit Symfony 3.3.10.

Mein Codebeispiel:

$imageForm->add('image', FileType::class, array(
    'label' => false, 
    'attr' => array(
     'accept' => "image/*", 
     'multiple' => "multiple", 
    ), 
    'required' => true, 
    'multiple' => true, 
)); 

$imageForm->handleRequest($request); 

if ($imageForm->isSubmitted() && $imageForm->isValid()) { 
    $model = $imageForm->getData(); 
    $files = $model->getImage(); 

    foreach($files as $file) { 
     $newFileName = $someGeneratedIdentifier.'.'.$file->guessClientExtension(); 

     $file->move(
      $this->getParameter('directory').'/'.$someSubdirectory, 
      $newFileName 
     ); 

... 
Verwandte Themen