2017-01-08 3 views
2

В настоящее время я загружаю один файл изображения за один раз в базу данных mysql. Однако мне нужно загрузить 800 изображений, поэтому я хочу выбрать все изображения и загрузить их одним нажатием. Это мой PHP контроллерЗагрузите несколько файлов в форму PHP

/** 
    * @Route("/insert", name="satellite_images_create") 
    */ 
    public function insertAction(Request $request) 
    { 
     $satelliteImage=new satelliteImage; 

     $form=$this->createFormBuilder($satelliteImage) 
      ->add('file') 

      ->add('save',SubmitType::class,array('label'=>'Insert Image','attr'=>array('class'=>'btn btn-primary','style'=>'margin-bottom:15px'))) 
      ->getForm(); 

     $form->handleRequest($request); 

     if ($form->isSubmitted() && $form->isValid()) { 
      $em=$this->getDoctrine()->getManager(); 

      $satelliteImage->upload(); 

      $em->persist($satelliteImage); 
      $em->flush(); 

      $this->addFlash(
       'notice', 
       'Image inserted successfully' 
       ); 

      return $this->redirectToRoute('satellite_images'); 
     } 

     return $this->render('satelliteImages/insert.html.twig',array(
      'form'=>$form->createView())); 
    } 

SatelliteImage ЛИЦО имеет функцию для обработки время загрузки

public function upload() 
    { 
    // the file property can be empty if the field is not required 
    if (null === $this->getFile()) { 
     return; 
    } 

    $imgFile=$this->getFile(); 
    $this->setImage(file_get_contents($imgFile)); 

    $this->getFile()->move(
     $this->getUploadRootDir(), 
     $this->getFile()->getClientOriginalName() 
    ); 

    // set the path property to the filename where you've saved the file 
    $this->path = $this->getFile()->getClientOriginalName(); 

    // clean up the file property as you won't need it anymore 
    $this->file = null; 
    } 

А вот мой прутик файл

{% extends 'base.html.twig' %} 

{% block body %} 
    <h2 class="page-header">Insert Image</h2> 
    {{ form_start(form) }} 
    {{ form_widget(form) }} 
    {{ form_end(form) }} 

{% endblock %} 

Как изменить форму и загрузить функцию, чтобы я мог выбрать все файлы изображений, которые будут загружены? Спасибо.

+1

Ваш шаблон должен произвести необходимый HTML разрешить несколько загрузок файлов, т. е. jeff

+0

Это можно сделать. Но как я могу обработать его в контроллере? –

ответ

1

Я бы рекомендовал проверить DropzoneJS http://www.dropzonejs.com/

Это Java-интерфейс для обработки загрузки нескольких файлов. Он работает, передавая файлы на сервер PHP для хранения/обработки.

EDIT - Сложение

Если вам нужна информация о том, как использовать DropzoneJS с Symfony2 затем проверить Multi upload Symfony 2.3 with Dropzone

Кроме того, этот вопрос в основном дублирует Problems With Multiple File Upload In Symfony2

+0

Передняя часть в порядке, Моя проблема заключается в том, как я буду обращаться с ними в PHP backend –

+0

В основном вам нужно вызвать функцию 'upload()' для каждого файла. Форма вашего внешнего интерфейса должна отправлять каждый файл по отдельности. Так работает DropzoneJS. Если вы попытаетесь отправить все 800 изображений в один большой POST, у вас могут возникнуть проблемы с 'upload_max_filesize' и' post_max_size'. – infinigrove

+0

Также я бы сказал, что если ваш PHP-сервер в настоящее время обрабатывает один файл, то бэкэнд в порядке, и проблема связана с вашим интерфейсом. Вам просто нужно, чтобы передняя часть отправляла каждый файл на сервер PHP отдельно. – infinigrove