OneupUploaderBundle:文件未上传且UploadListener不会持久保存到DB,为什么?

时间:2014-11-28 08:22:35

标签: php symfony oneupuploaderbundle

我正在尝试使用OneupUploaderBundle上传一个或多个文件,但由于文件未上传且没有任何内容持久保存到数据库,因此无法使其正常工作。我将解释我现在所做的事情:

config.yml

oneup_uploader:
    mappings:
        recaudos:
            frontend: blueimp
            storage:
                service:              ~
                type:                 filesystem
                filesystem:           ~
                directory:            %kernel.root_dir%/../web/uploads/recaudos
                stream_wrapper:       ~
                sync_buffer_size:     100K
            allowed_mimetypes:     [application/msword,image/jpeg,image/pjpeg,image/png,application/pdf,application/vnd.oasis.opendocument.text]
            #disallowed_mimetypes:  []
            error_handler:        oneup_uploader.error_handler.noop

            # Set max_size to -1 for gracefully downgrade this number to the systems max upload size.
            #max_size:             9223372036854775807
            use_orphanage:        true
            enable_progress:      true
            enable_cancelation:   true
            namer:                oneup_uploader.namer.uniqid

在Twig模板上只有这个:

<input id="fileUpload3" class="fileUpload" type="file" name="fileUpload3[]" data-url="{{ oneup_uploader_endpoint('recaudos') }}" multiple />

$(document).ready(function(){
    $('fileUpload3').fileupload();
});

最新的这是onUpload事件的监听器:

namespace AppBundle\EventListener;

use Oneup\UploaderBundle\Event\PostPersistEvent;
use Symfony\Component\HttpFoundation\Request;
use AppBundle\Entity;

class UploadListener
{
    protected $doctrine;

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

    public function onUpload(PostPersistEvent $event, Request $request)
    {
        $session = $request->getSession();
        $em = $this->doctrine->getManager();
        $request = $event->getRequest();
        $tempfile = $event->getFile();

        $productoSolicitud = $em->getRepository('SolicitudProducto')->find($session->get('productoSolicitudId'));

        $recaudosTramiteProductoSolicitud = new Entity\RecaudosTramitesProductoSolicitud();
        $recaudosTramiteProductoSolicitud->setProductoSolicitud($productoSolicitud);

        $filenamePart = explode("--", $tempfile->getName());
        $pathinfo = pathinfo($tempfile->getName());
        $recaudosTramiteProductoSolicitud->setArchivo($pathinfo['filename']);

        $em->persist($recaudosTramiteProductoSolicitud);
        $em->flush();
    }
}

当然,我也定义了服务:

appbundle.upload_listener:
    class: "AppBundle\EventListener\UploadListener"
    arguments:  [@doctrine]
    tags:
        - { name: 'kernel.event_listener', event: "oneup_uploader.post_persist", method: "onUpload" }

我错过了什么吗?为什么文件没有上传而数据没有保留?正如您在附图中看到的,有_uploader/recaudos/upload的帖子请求,有任何建议吗?

enter image description here

1 个答案:

答案 0 :(得分:3)

我刚检查了自己的OneupUploader实现:

将您的函数“onUpload”重命名为“onPostUpload”并将您的服务配置更改为:

appbundle.upload_listener:
class: "AppBundle\EventListener\UploadListener"
arguments:  [@doctrine]
tags:
    - { name: 'kernel.event_listener', event: oneup_uploader.post_upload, method: onPostUpload }

应该有用,对我有用。

如果您需要原始文件名,还需要onUpload方法,并且:

tags:
    # - {...
    - { name: kernel.event_listener, event: oneup_uploader.pre_upload, method: onUpload }

关于你的评论:

// UploadListener

class UploadListener
{
    protected $originalName;

    public function onUpload(PreUploadEvent $event)
    {
        $file = $event->getFile();
        $this->originalName = $file->getClientOriginalName();
    }

    public function onPostUpload(PostUploadEvent $event)
    {
        $fileEntity = new YourFileEntity();
        $fileEntity->setYourOriginalNameProperty($this->originalName);
        //...
    }

}