2017-01-08 12 views
2

私は現在、一度に1つの画像ファイルを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 ENTITYアップロード

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

の複製であります複数のファイルをアップロードできるようにする jeff

+0

これを行うことができます。しかし、コントローラでどのように扱うことができますか? –

答えて

1

私はそれは、複数のファイルのアップロードを処理するためのJavaScriptのフロントエンドであるDropzoneJS http://www.dropzonejs.com/

をチェックアウトすることをお勧めします。これは、保存/処理のためにファイルをPHPバックエンドに渡すことによって機能します。

EDIT - ADDITION

あなたはSymfony2のでDropzoneJSを使用する方法に関する情報が必要な場合は、その後Multi upload Symfony 2.3 with Dropzone

をチェックアウトするには、また、この質問はあなたのテンプレートが必要なHTMLを生成しなければならない基本的にProblems With Multiple File Upload In Symfony2

+0

フロントエンドは問題ありません。私の問題は、PHPバックエンドでそれらを処理する方法です。 –

+0

基本的には、各ファイルに対して 'upload()'関数を呼び出す必要があります。フロントエンドのフォームでは、各ファイルを個別に送信する必要があります。それがDropzoneJSの仕組みです。 1つの大きなPOSTで800個の画像をすべて送信しようとすると、 'upload_max_filesize'と' post_max_size'に問題がある可能性があります。 – infinigrove

+0

また、PHPバックエンドが現在1つのファイルを処理している場合、バックエンドは問題なくフロントエンドに問題があると言います。フロントエンドに各ファイルをPHPのバックエンドに個別に送信させるだけです。 – infinigrove

関連する問題