如何使用Elfinder检查特定文件夹

时间:2019-06-12 22:13:04

标签: javascript jquery elfinder

我有一个正在使用Elfinder的应用程序。上载后,我需要检查文件是否正在上载到特定文件夹,例如“ DIRECTOR”文件夹,也需要在单击按钮时打开该文件夹。

在以下情况下获取文件夹名称:
1.文件正在上传
2.单击按钮

我尝试添加commandOptions,将文件夹设置为true,但是只有选择一个文件时,我才获得文件夹信息。每当文件上载到该文件夹​​时,我都需要知道该文件夹的名称。我还在bind('upload')中使用了getFileCallback,但是我没有得到path属性。双击时仅获得“ path”属性。有人知道要使用的正确功能或如何获取文件夹名称吗?

<div id="openFolderDiv">
    <button type="button" id="openFolderBtn"/>
    <label id="lblOpenFolderBtn">Open Director Folder</label>
</div>

$('#openFolderBtn').click(function () {
    // open "DIRECTOR" folder      
});

var options = {
    commands: myCommands,
    commandsOptions: {
        getfile: {
            folders: true
        }
    },
    getFileCallback: function (file) {
        if (file.path.includes("DIRECTOR")) {
            return file.path;
        }
    },
};

elfinder.bind('upload', function (event, instance) {
    var path = options.getFileCallback(event, instance);
});

我遇到的另一个问题是,当我双击打开一个文件夹时,会触发getFileCallback函数,但该文件夹无法打开。

1 个答案:

答案 0 :(得分:0)

我不久前就能找到答案,这是我的解决方案: 在选择处理程序中,我能够通过解码从elfinder项的哈希字符串转换的base64url来获得文件夹名称。

    var options = {
            url: '../connector.ashx',
            uiOptions: {
                toolbar: [
                    ['mkdir', 'mkfile', 'upload'],
                    ['open', 'download'],
                    ['copy', 'cut', 'paste'],
                    ['duplicate', 'rename', 'edit'],
                    ['search']
                ]
            },
            handlers: {
                select: function (event, elfinderInstance) {
                    if (event.data.selected.length == 1) {
                        var item = $('#' + event.data.selected[0]);
                        var hashString = item.selector;
                        var folderPath = parseToken(hashString);
                        var folderName = folderPath.split("\\")[1];
                        if (folderName.toUpperCase() == "DIRECTOR") {
                            $('#submitDataBtn').show();
                        }
                    }
                }
            }
        };
        var elfinder = $('#elfinder').elfinder(options).elfinder('instance');

        function parseToken (token) {
            var base64Url = token.split('_')[1];
            var folderPathDecoded = decodeBase64Url(base64Url);
            return folderPathDecoded;
        };

        function decodeBase64Url(s) {
            var e = {}, i, b = 0, c, x, l = 0, a, r = '', w = String.fromCharCode, L = s.length;
            var A = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
            for (i = 0; i < 64; i++) { e[A.charAt(i)] = i; }
            for (x = 0; x < L; x++) {
                c = e[s.charAt(x)]; b = (b << 6) + c; l += 6;
                while (l >= 8) { ((a = (b >>> (l -= 8)) & 0xff) || (x < (L - 2))) && (r += w(a)); }
            }
            return r;
        };