如何使用 Elfinder 检查特定文件夹
How to check for specific folder with Elfinder
我有一个使用 Elfinder 的应用程序。上传后,我需要检查文件是否正在上传到特定文件夹,例如 "DIRECTOR" 文件夹,还需要在单击按钮时打开该文件夹。
获取文件夹名称时:
1. 正在上传文件
2. 按钮被点击
我尝试添加命令选项,将文件夹设置为 true,但我只在 select 一个文件时获取文件夹信息。每次将文件上传到该文件夹时,我都需要知道文件夹名称。我还在 bind('upload') 中使用了 getFileCallback,但我没有得到路径 属性。当我双击时,我只得到 "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 函数被触发但文件夹没有打开。
不久前我找到了答案,这是我的解决方案:
在 select 处理程序中,我能够通过解码从 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;
};
我有一个使用 Elfinder 的应用程序。上传后,我需要检查文件是否正在上传到特定文件夹,例如 "DIRECTOR" 文件夹,还需要在单击按钮时打开该文件夹。
获取文件夹名称时:
1. 正在上传文件
2. 按钮被点击
我尝试添加命令选项,将文件夹设置为 true,但我只在 select 一个文件时获取文件夹信息。每次将文件上传到该文件夹时,我都需要知道文件夹名称。我还在 bind('upload') 中使用了 getFileCallback,但我没有得到路径 属性。当我双击时,我只得到 "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 函数被触发但文件夹没有打开。
不久前我找到了答案,这是我的解决方案: 在 select 处理程序中,我能够通过解码从 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;
};