2016-12-14 56 views
1

我使用Symfony 3.2,並使用只接受jpg,jpeg,gif和png擴展名的文件字段構建我的表單。不幸的是,我不能用.jpg擴展名上傳任何圖片,儘管我在允許的MIME類型中提到了image/jpeg mime類型。顯示錯誤「mimeTypesMessage」。我無法上傳我的表單中的JPG圖像

如果你看一看,我將不勝感激。由於

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... 

什麼奇怪的是我,圖像/ JPEG的MIME類型不IANA頁面上列出( http://www.iana.org/assignments/media-types/media-types.xhtml)。不幸的是,我還沒有在互聯網上找到問題解決方案。

+0

檢查ENCTYPE。它必須是多部分 – Carlos

+0

你有沒有嘗試上傳.png文件?也許問題是你的表單不允許文件上傳? – Merv

+0

夥計們,沒有問題的PNG和GIF文件 –

回答

1

看起來像你的問題的原因,只是一個小錯字。插錯了地方的逗號:

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

0

嘗試使用圖像而不是文件。它在默認情況下接受所有圖像類型和應JPG/JPEG工作:

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

+1

通過使用圖像而不是文件是什麼意思?我使用'FileType'來構建我的表單,因爲沒有用於這些目的的'ImageType'類。你給的鏈接是用於表單驗證,我已經使用它 –

0

我有同樣的問題與$file->guessExtension()並不能找到任何解決方案,你一樣。

直到我找到$file->guessClientExtension()函數here,它在與Symfony 3.3.10交換後適用於我。

我的代碼示例:

$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 
     ); 

... 
相關問題