如何在elfinder插件(一个文件管理器插件)上获得上传前事件

How to get the before upload event at the elfinder plugin (a file manager plugin)

本文关键字:插件 事件 文件管理器 一个 elfinder      更新时间:2023-09-26

我正在使用jquery 开发文件管理器

这是代码:

 var elfinder = $('#elfinder').elfinder({
            url: '<?= $connector; ?>',
            soundPath: '<?= site_url('assets/plugins/elFinder/sounds/rm.wav'); ?>',
            height: 700,
            lang: 'zh_TW',
            uiOptions: {
                // toolbar configuration
                toolbar: [
                    ['back', 'forward'],
                    ['reload'],
                    ['mkdir', 'upload'],
                    ['copy', 'cut', 'paste', 'rm'],
                    ['rename'],
                    ['view', 'sort']
                ]
            },
            contextmenu: {
                navbar: ['open', '|', 'copy', 'cut', 'paste', 'duplicate', '|', 'rm', '|', 'info'],
                cwd: ['reload', 'back', '|', 'upload', 'mkdir', 'paste', '|', 'info'],
                files: [
                    'open', 'quicklook', 'sharefolder', '|', 'download', '|', 'copy', 'cut', 'paste', 'rm', '|', 'rename', '|', 'info'
                ]
            },
            ui: ['toolbar', 'tree', 'stat'],
            handlers: {
                add: function (e) {
                },
                upload: function (e, instance) {
                    alert("test1");
                    //alert("test2");
                    //return false;
                    //console.log(event.data);
                    //console.log(event.data.selected); // selected files hashes list
                }
            }
        });

问题是,

1) 我想在文件上传之前进行一些检查,如果失败,则取消上传,但在添加/上传事件中,它在上传开始后被激发,并激发多次

2) 此外,它无法捕获上传完成事件,因为上传事件会触发多次

以下是事件列表:

https://github.com/Studio-42/elFinder/wiki/Client-event-API

有什么建议,非常感谢您的帮助。

更新:

在服务器端查找,有一个绑定选项,用于覆盖命令,例如"rm-mkdir"等。然而,我想在存储时获得用户id,那么在客户端有我可以覆盖的事件列表吗?感谢

https://github.com/Studio-42/elFinder/wiki/Connector-configuration-options

请重写该函数,因为在执行命令之前没有挂钩点。

var elfinderInstance =  $('#elfinder').elfinder({ /* Your options */ }).elfinder('instance');
elfinderInstance.upload = function(files) {
    var hasError;
    elfinderInstance.log(files); // print to browser consol
    if (hasError) {
        elfinderInstance.error('upload error');
        return $.Deferred().reject();
    } else {
        return elfinderInstance.transport.upload(files, elfinderInstance);
    }
};