不调用Symfony 3.1和OneUpUploaderBundle + Blueimp = UploadListener

介绍

大约两周前,我使用OneupUploaderBundle创建了类似的关于上传的问题,但是使用了FineUploader库。 可悲的是,还没有答案。 在此期间,我尝试设置不同的上传库。

我正在使用XAMPP [1]在Windows 10 Pro进行开发,其中包括PHP v7.0.8

  • [1] 适用于Windows的XAMPP

我正在使用Symfony v3.1.5, OneupUploaderBundle和Blueimp jQuery上传 ,以便将文件上传到服务器。

在设置时我遵循了OneUpUploaderBundle [2]和jQuery file upload [3],[4]的文档。

  • [2] OneupUploaderBundle文档
  • [3] OneupUploaderBundle Blueimp示例
  • [4] Blueimp jQuery文件上传文档

问题

我想将文件上传到某个目录然后检查它们的mime类型并validation是否允许上传文件mime类型,之后 – 将它们移动到自定义目录(可以从文件更改为文件),最后我想保留文件路径和文件名到数据库。

文件上传工作正常,文件上传到oneup_uploader_endpoint('gallery') 。 甚至自定义文件Namer也可以工作并允许上传到自定义目录。

但是, 不会调用侦听器 (上传侦听器和validation)并显示在Symfony Profiler事件部分Not Called Listeners

这很不幸,因为我想使用Post_Persist事件将有关文件的信息保存到数据库。 OneupUploaderBundle事件 。

我的services.yml

 services: app.upload_listener: class: AppBundle\EventListener\UploadListener arguments: ["@doctrine.orm.entity_manager"] tags: - { name: kernel.event_listener, event: oneup_uploader.post_persist.default_uploader, method: onUpload } - { name: kernel.event_listener, event: oneup_uploader.post_persist.default_uploader, method: onPostUpload } app.upload_unique_namer: class: AppBundle\Uploader\Naming\UploadUniqueNamer arguments: ["@session"] 

我的自定义名字

 session = $session; } /** * Creates a user directory name for the file being uploaded. * * @param FileInterface $file * @return string The directory name. */ public function name(FileInterface $file) { $upload_files_path = $this->session->get('upload_files_path'); $unique_name = uniqid(); return sprintf('%s/%s_%s', $upload_files_path, $unique_name, $file->getClientOriginalName() ); } } 

我的config.yml

 oneup_uploader: mappings: gallery: frontend: blueimp enable_progress: true namer: app.upload_unique_namer use_orphanage: false allowed_mimetypes: [image/png, image/jpg, image/jpeg, image/gif] max_size: 200M 

我的上传监听器:

 entityManager = $entityManager; } public function onUpload(PostPersistEvent $event) { $file = $event->getFile(); $this->originalName = $file->getClientOriginalName(); } public function onPostUpload(PostPersistEvent $event) { $file = $event->getFile(); $object = new Product(); $object->setName($file->getClientOriginalName()); //$object->setName($file->getPathName()); $this->entityManager->persist($object); $this->entityManager->flush(); } } 

upload.html.twig

 {% extends 'base.html.twig' %} {% block stylesheets %} {{ parent() }}    {% endblock %} {% block content %} 
Go to: Product list
 Choose files...

Upload status...

{% endblock %} {% block javascripts %} {{ parent() }} $(function() { 'use strict'; $('#file-upload').on('click', function () { $('#box-progress-bar').css('width', '1%'); }); $('#file-upload').on("fileuploadprocessfail", function(e, data) { var file = data.files[data.index]; alert(file.error); console.log(file.error); }); $('#file-upload').fileupload({ dataType: 'json', add: function (e, data) { var fileName = data.files[0].name; var fileType = data.files[0].name.split('.').pop(); var allowedTypes = 'jpg,JPG,jpeg,JPEG,png,PNG,gif,GIF'; if (allowedTypes.indexOf(fileType) < 0) { $('#box-progress-bar').css('width', '0'); $('

').text(fileName).appendTo($('#box-info')); $('

').text('Invalid file type').appendTo($('#box-info')); return false; } else { $('

').text(fileName).appendTo($('#box-info')); if ($('.button-upload').length == 0) { // disabling file input $('input#file-upload').attr('disabled', true); data.context = $('

更新

  1. 添加了有关开发环境的说明。
  2. 用Symfony v2.8.8尝试了相同的代码,遗憾的是没有调用UploadListener。
  3. 编辑的services.yml ,删除(我认为)现在不必要(重复 – 在OneupUploaderBundle中提供)validation,我在尝试使其工作时添加…

结论

请指教。

感谢您的时间和知识。

只听正确的事件。 事件交换包含映射的名称,以便您可以为此实现一个不会影响其他逻辑的特定逻辑。

这种格式的事件。

 oneup_uploader.post_upload.{mapping} 

在你的情况下它会给

 oneup_uploader.post_upload.gallery 

有关更多信息,请阅读https://github.com/1up-lab/OneupUploaderBundle/blob/master/Resources/doc/events.md