不调用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 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 = $('').text('Upload') .appendTo($('#box-info')) .click(function () { data.context = $('').text('Uploading...').replaceAll($(this)); ($('.button-cancel')).remove(); data.submit(); }); $('').text('Cancel') .appendTo($('#box-info')) .click(function () { $('#box-progress-bar').css('width', '0'); //console.log('testing'); var message = 'Upload canceled'; ($('.button-upload')).remove(); ($('.button-cancel')).remove(); $('').text(message).appendTo($('#box-info')); // enabling file input $('input#file-upload').attr('disabled', false); }); } } }, progressall: function (e, data) { var progress = parseInt(data.loaded / data.total * 100, 10); $('#box-progress-bar').css('width', progress + '%'); }, done: function (e, data) { data.context.text('Upload finished.'); // enabling file input $('input#file-upload').attr('disabled', false); } }); }); {% endblock %}
更新
- 添加了有关开发环境的说明。
- 用Symfony v2.8.8尝试了相同的代码,遗憾的是没有调用UploadListener。
- 编辑的
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
- blueimp jQuery-File-Upload没有ajax
- 如何重置blueimp jQuery fileupload插件?
- jQuery文件上传插件:是否可以保留上传文件夹的结构?
- 使用Jquery插件blueimp gallery在lightbox中显示描述
- blueimp jquery-file-upload如何在上传前取消1个文件
- jQuery文件上传(Blue imp)Symfony 2 405方法不允许
- ajax加载的html中的多个jQuery插件实例
- blueimp jquery文件上传空文件上传结果struts2,文件项目为空
- 如何在blueimp Basic中上传开始之前从队列中删除文件以停止上传?