Php Symfony 2将JQueryFileUpload文件保存在Sonata媒体中

Php Symfony 2将JQueryFileUpload文件保存在Sonata媒体中,php,jquery,symfony,Php,Jquery,Symfony,我正在尝试将JqueryFileUpload上传的文件保存在Sonata媒体中,但它不起作用。 我使用OneUploaderBundle将JQueryFileUpload与Symfony2集成 我已经尝试了postploadevent和preUploadEvent 并使用jQuery脚本中的data.files 如果有人知道如何通过Symfony或JQuery获取包含内容的文件对象,那将是一个很大的帮助 public function onUpload(PreUploadEvent $event

我正在尝试将
JqueryFileUpload
上传的文件保存在Sonata媒体中,但它不起作用。 我使用OneUploaderBundle将JQueryFileUpload与Symfony2集成

我已经尝试了
postploadevent
preUploadEvent

并使用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);

              }
        });
    });
$(文档).ready(函数()
{
$('#fileupload')。fileupload({
添加:功能(e、数据){
if(data.files&&data.files[0]){
var reader=new FileReader();
reader.onload=函数(e){
$('#上传')。追加(“\n”\
");
}
data.result=data.files[0];
reader.readAsDataURL(data.files[0]);
data.submit();
}
},
进度:功能(e、数据){
var progress=parseInt(data.loaded/data.total*100,10);
$('#progress.bar').css(
“宽度”,
进度+“%”
);
},
完成:功能(e,数据){
var out='';
var obj=数据;
用于(obj中的var i){
out+=i+“:“+obj[i]+”\n”;
}
此属性为空
警报(数据文件);
}
});
});

我发现了发生的事情。这是因为我在构造中使用的是ObjectManager,而不是EntityManager

类上载侦听器{

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;
}

}我发现发生了什么事。这是因为我在构造中使用的是ObjectManager,而不是EntityManager

类上载侦听器{

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;
}

}

如果我错了,请纠正我的错误,但我认为您可能会误解将文件作为XHR请求发送给家长表单的主提交。是的。这是因为我需要设计一个像facebook这样的画廊。需要上传和图像,预览它,并在画廊发布。我使用的是SonatamaDiabundle、OneUploaderBundle和JqueryFileUpload。如果我错了,请纠正我,但我认为您可能会误解将文件作为XHR请求发送给父表单的主提交。是的。这是因为我需要设计一个像facebook这样的画廊。需要上传和图像,预览它,并在画廊发布。我使用的是SonatamaDiabundle、OneUploaderBundle和JqueryFileUpload。