2017-02-06 5 views
0

JqueryFileUploadによってアップロードされたファイルをSonata Mediaに保存しようとしていますが、動作しません。私はSymfony2のSymfony 2 Sonata MediaでJQueryFileUploadファイルを維持する

でJQueryFileUploadを統合するOneUpUploaderBundle使用 は、私はすでにpostUploadEventpreUploadEvent

ととjQueryスクリプトからdata.filesで試してみました。

Symfony内またはJQuery経由でファイルオブジェクトを取得する方法を知っている人は、大きな助けになります。

public function onUpload(PreUploadEvent $event) { 

    $request = $event->getRequest(); 

    $files = $request->files->get('uploadFiles'); 

    foreach ($request->files->get('uploadFiles') as $fotoTemporaria) { 

    $foto = new Media(); 

    $foto->setProviderName('sonata.media.provider.image'); 
    $foto->setContext('default'); 
    $foto->setBinaryContent($fotoTemporaria); 
    $foto->setEnabled(true); 

    $mediaManager->persist($foto); 
    $mediaManager->flush(); 

    } 

    $response = $event->getResponse(); 

    $response['uploadedFiles'] = $files; 

    $response['success'] = true; 
    return $response; 
} 

services.ymlファイル

media_upload_listener: 
    class: AppBundle\ClassServices\UploadListener 
    arguments: [@doctrine.orm.entity_manager] 
    tags: 
     - { name: kernel.event_listener, event: oneup_uploader.post_persist, method: onUpload } 

とjQueryは、ファイルが

$(document).ready(function() 
    { 
     $('#fileupload').fileupload({ 
      add: function (e, data) { 
       if (data.files && data.files[0]) { 
        var reader = new FileReader(); 
        reader.onload = function (e) { 
         $('#uploaded').append("<div id='imageNumber' class='imageContainer'><img class='imagePreview' src='" + e.target.result + "'> \n\ 
       <input type='file' name='realMedia[]' style='display:none' value='" + e.target.result + "'></div>"); 
        } 
        data.result = data.files[0]; 
        reader.readAsDataURL(data.files[0]); 
        data.submit(); 
       } 
      }, 
      progress: function (e, data) { 
       var progress = parseInt(data.loaded/data.total * 100, 10); 
       $('#progress .bar').css(
         'width', 
         progress + '%' 
         ); 
      }, 
      done: function (e, data) { 
       var out =''; 
       var obj = data; 
       for (var i in obj) { 
        out += i + ": " + obj[i] + "\n"; 
       } 

       this attribute is empty 
       alert(data.files); 

       } 
     }); 
    }); 
+0

私が間違っているなら、私を修正して、私はあなたがマスター親フォームの提出とXHRリクエストとしてファイルを送信誤解するかもしれないと思います。 –

+0

はい。それは私がFacebookのようなギャラリーをプログラムする必要があるからです。アップロードしてイメージを作成し、プレビューしてギャラリーに公開する必要があります。そして、私はSonataMediaBundle、OneUpUploaderBundleとJqueryFileUploadを使用しています。 – Marcelo

答えて

0

私は何が起こっているかを発見しました。それは、私がEntityManagerではない構造体でObjectManagerを使用していたためです。

クラスUploadListener {

protected $em; 

public function __construct(EntityManager $em) { 
    $this->em = $em; 
} 

public function getEm() { 
    return $this->em; 
} 

public function onUpload(PostPersistEvent $event) { 

    $file = $event->getFile(); 

    $entityManager = $this->getEm(); 

    $foto = new Media(); 

    $foto->setProviderName('sonata.media.provider.image'); 
    $foto->setContext('default'); 
    $foto->setBinaryContent($file); 
    $foto->setUsuario($event->getRequest()->get('user')); 
    $foto->setEnabled(true); 

    $entityManager->persist($foto); 
    $entityManager->flush(); 

    $response = $event->getResponse(); 

    $response['success'] = true; 

    return $response; 
} 

}

関連する問題