FM 是在 MIT 许可下发布的开源文件管理器。它是 elfinder 或 CKFinder 的替代品。
重要信息:此软件包已弃用。
现在,请使用具有许多新功能和改进的RichFileManager包。
文件管理器拥有免费许可。如果您想支持 filemanager 的开发或者只是通过支付啤酒来感谢其主要维护者,您可以通过单击以下按钮进行捐赠:
Filemanager 在 wiki 页面上有详细记录。 API,见下文。
前言
由于最近进行了许多更改,现在仅 PHP 和 MVC 连接器可用。您可以尝试其他连接器的最新版本,但不保证它们实现所有功能并正常工作。
要使用其他连接器,请从 https://github.com/simogeo/Filemanager/archive/v0.8.zip 下载 v0.8 版本(提供 PHP、ASHX、ASP、CFM、lasso、PL 和 JSP 连接器)
JSP/Java 连接器实现位于:https://github.com/th-schwarz/C5Connector.Java
(1)使用 Git 从存储库中查看 FileManager 的副本:
git 克隆 http://github.com/simogeo/Filemanager.git
或从 Github 下载存档:https://github.com/simogeo/Filemanager/archive/master.zip
您可以将 FileManager 放置在 Web 服务根目录中的任何位置。
(2)复制默认配置文件(位于脚本目录中的“filemanager.config.default.json”),删除文件名末尾的“.default”,并根据以下 wiki 编辑选项页面:https://github.com/simogeo/Filemanager/wiki/Filemanager-configuration-file 查看配置案例研究也可能对您有所帮助: https://github.com/simogeo/Filemanager/wiki/Specify-user-folder%2C-configuration-cases
(3a)如果您要将 FileManager 与 FCKEditor 集成,请打开 fckconfig.js 文件并找到指定用于图像、链接等的文件浏览器的行。查看文件底部。您将需要更改如下行:
FCKConfig . ImageBrowser = false ;
FCKConfig . ImageBrowserURL = FCKConfig . BasePath + 'filemanager/browser/default/browser.html?Type=Image&Connector=../../connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ;
...对此:
FCKConfig . ImageBrowser = true ;
FCKConfig . ImageBrowserURL = '[Path to Filemanager]/index.html' ;
(3b)如果您要将 FileManager 与 CKEditor 3.x 或更高版本集成,只需在配置实例时设置 URL,如下所示:
CKEDITOR . replace ( 'instancename' , {
filebrowserBrowseUrl : '[Path to Filemanager]/index.html' ,
... other configuration options . . .
} ) ;
如果您想使用模态对话框模式(而不是弹出),请参考专用的wiki页面。
(3c)如果您将 FileManager 与 TinyMCE (>= 3.0) 集成,您应该:
创建一个 Javascript 回调函数,该函数将打开 FileManager index.html 基本页面(请参阅下面的 URL 作为示例) 在tinyMCE.init 命令中添加如下行:“file_browser_callback : 'name_of_callback_function'” 请参阅 http://www.tinymce.com /wiki.php/TinyMCE3x:How-to_implement_a_custom_file_browser 了解更多详细信息。
另请参阅专用 wiki 页面,其中包含 TinyMCE 4 示例:https://github.com/simogeo/Filemanager/wiki/How-to-use-the-Filemanager-with-tinyMCE-3-or-4
(4)最后但同样重要的是,担心安全!
对于PHP 连接器:将/connectors/php/default.config.php
复制/粘贴到/connectors/php/user.config.php
以定义您自己的身份验证函数。为此,您可以在专门的 wiki 页面上找到一个示例。
jQuery 依赖性和兼容性
我们尝试定期更新 jQuery 核心库。如果出于任何原因,您现在无法使用嵌入的 jQuery 版本,那么 Filemanager 可能会使用 >= 1.6 的 jQuery 版本。您必须使用 jQuery.migrate() 插件才能将其与 jQuery 1.9+ 版本一起使用。
重要提示:Filemanager 设计为无需任何特殊配置即可工作,但在没有任何配置的情况下使用它是非常不安全的。请根据默认文件并参考专用wiki页面设置您自己的身份验证功能。
您可以按照这个简单的 API 为您选择的服务器端语言创建连接器。您必须在以下位置有一个脚本,该脚本可以通过返回适当的 JSON 对象来响应 HTTP GET 请求:
[path to FileManager]/connectors/[language extension]/filemanager.[language extension]
FileManager 目前在以下位置包含适用于 PHP、MVC、JSP、lasso、ASP、ASHX、PL 和 CFM 的连接器:
PHP: .../connectors/php/filemanager.php
ASP.NET MVC Framework .../connectors/mvc/FilemanagerController.cs
JSP: .../connectors/jsp/filemanager.jsp
lasso: .../connectors/lasso/filemanager.lasso
ASP: .../connectors/asp/filemanager.asp
ASHX: .../connectors/ashx/filemanager.asp
PL: .../connectors/pl/filemanager.pl
CFM: .../connectors/cfm/filemanager.cfm
只要此位置存在用于响应请求的脚本,您就可以按照您认为合适的方式拆分代码(外部库、配置文件等)。
每个响应都应包含两个特定于错误处理的键:错误和代码。如果您的脚本中出现错误,您可以使用您认为最合适的任何值填充这些键。如果没有错误,Error 应保持为空或 null,Code 应为空、null 或零 (0)。不要对任何实际错误使用零。如果连接器使用外部文件进行配置(推荐),但找不到该文件,则以下示例将是适当的响应:
{
"Error" : " Configuration file missing. " ,
"Code" : -1
}
您的脚本应包含对以下方法/函数的支持。来自 FileManager 的 GET 请求包含一个参数“mode”,该参数指示要返回的响应类型。其他参数将提供完成请求所需的其他信息,例如当前目录。
getinfo
方法返回有关单个文件的信息。模式为“getinfo”的请求将包含一个附加参数“path”,指示要检查哪个文件。布尔参数“getsize”指示是否应返回文件(如果是图像)的尺寸。
请求示例:
[path to connector]?mode=getinfo&path=/UserFiles/Image/logo.png&getsize=true
响应示例:
{
"Path" : " /UserFiles/Image/logo.png " ,
"Filename" : " logo.png " ,
"File Type" : " png " ,
"Preview" : " /UserFiles/Image/logo.png " ,
"Protected" : 0 ,
"Properties" : {
"Date Created" : null ,
"Date Modified" : " 02/09/2007 14:01:06 " ,
"filemtime" : 1360237058 ,
"Height" : 14 ,
"Width" : 14 ,
"Size" : 384
},
"Error" : " " ,
"Code" : 0
}
按键如下:
Path: The path to the file. Should match what was passed in the request.
Filename: The name of the file, i.e., the last part of the path.
File Type: The file extension, "dir" if a directory, or "txt" if missing/unknown.
Preview: Path to a preview image. If the file is an image that can be displayed in a web browser (i.e., gif, jpg, or png), you should return the path to the image. Otherwise, check to see if there is a matching file icon based on the file extension, constructing the path like so:
Directories: images/fileicons/_Open.png
Files: images/fileicons/[extension].png
Unknown: images/fileicons/default.png
Protected: Indicates if the file has some reading / writing restrictions. If not, set to 0. Else set to 1.
Properties: A nested JSON object containing specific properties of the file.
Date Created: The file's creation date, if available.
Date Modified: The file's modification date, if available.
Height: If an image, the height in pixels.
Width: If an image, the width in pixels.
Size: The file size in bytes.
Capabilities (optional): You can limit the operation buttons shown for a specific file. It is an array containing ['select','delete','rename','download'] (for all capabilities), or [] (for no capabilities). If not present, all capabilities are enabled.
Error: An error message, or empty/null if there was no error.
Code: An error code, or 0 if there was no error.
getfolder
方法返回表示给定目录内容(由“path”参数指示)的文件和文件夹对象的数组。它应该调用 getinfo 方法来检索每个文件的属性。布尔参数“getsizes”指示是否应为每个项目返回图像尺寸。文件夹应始终在文件之前返回。 (可选)可以指定“type”参数来限制返回的文件(取决于连接器)。如果为主index.html URL 指定了“type”参数,则相同的参数值将被重用并传递给getfolder。例如,这可以用于仅显示文件系统树中的图像文件。
请求示例:
[path to connector]?mode=getfolder&path=/UserFiles/Image/&getsizes=true&type=images
响应示例:
{
"/UserFiles/Image/logo.png" : {
"Path" : " /UserFiles/Image/logo.png " ,
"Filename" : " logo.png " ,
"File Type" : " png " ,
"Preview" : " /UserFiles/Image/logo.png " ,
"Protected" : 0 ,
"Properties" : {
"Date Created" : null ,
"Date Modified" : " 02/09/2007 14:01:06 " ,
"filemtime" : 1360237058 ,
"Height" : 14 ,
"Width" : 14 ,
"Size" : 384
},
"Error" : " " ,
"Code" : 0
},
"/UserFiles/Image/icon.png" : {
"Path" : " /UserFiles/Image/icon.png " ,
"Filename" : " icon.png " ,
"File Type" : " png " ,
"Preview" : " /UserFiles/Image/icon.png " ,
"Properties" : {
"Date Created" : null ,
"Date Modified" : " 02/09/2007 14:01:06 " ,
"filemtime" : 1360237058 ,
"Height" : 14 ,
"Width" : 14 ,
"Size" : 384
},
"Error" : " " ,
"Code" : 0
},
"/UserFiles/folder/" :{
"Path" : " /UserFiles/folder/ " ,
"Filename" : " folder " ,
"File Type" : " dir " ,
"Preview" : " images / fileicons / _Open.png " ,
"Properties" : {
"Date Created" : null ,
"Date Modified" : " 02/09/2007 14:01:06 " ,
"filemtime" : 1360237058 ,
"Height" : null ,
"Width" : null ,
"Size" : null
},
"Error" : " " ,
"Code" : 0
}
}
数组中的每个键都是单个项目的路径,值是该项目的文件对象。
rename
方法使用“new”参数中给出的名称重命名“old”参数中给出的路径处的项目,并返回一个指示该操作结果的对象。
请求示例:
[path to connector]?mode=rename&old=/UserFiles/Image/logo.png&new=id.png
响应示例:
{
"Error" : " No error " ,
"Code" : 0 ,
"Old Path" : " /a_folder_renamed/thisisareallylongincrediblylongfilenamefortesting.txt " ,
"Old Name" : " thisisareallylongincrediblylongfilenamefortesting.txt " ,
"New Path" : " /a_folder_renamed/a_renamed_file " ,
"New Name" : " a_renamed_file "
}
move
方法将“旧”文件或目录移动到指定的“新”目录。可以指定来自 fileRoot 目录的绝对路径或来自“旧”项目的相对路径。 “root”值是必需的,以确保相对路径不会高于 fileRoot。
请求示例:移动文件
[path to connector]?mode=move&old=/uploads/images/original/Image/logo.png&new=/moved/&root=/uploads/images/
响应示例:
{
"Error" : " No error " ,
"Code" : 0 ,
"Old Path" : " /uploads/images/original/Image/ " ,
"Old Name" : " logo.png " ,
"New Path" : " /uploads/images/moved/ " ,
"New Name" : " logo.png "
}
示例请求:将目录移动到不存在的目录(将创建)
[path to connector]?mode=move&old=/uploads/images/original/Image&new=../new_dir/&root=/uploads/images/
响应示例:
{
"Error" : " No error " ,
"Code" : 0 ,
"Old Path" : " /uploads/images/original/ " ,
"Old Name" : " Image " ,
"New Path" : " /uploads/new_dir/ " ,
"New Name" : " Image "
}
delete
方法删除给定路径中的项目。
请求示例:
[path to connector]?mode=delete&path=/UserFiles/Image/logo.png
响应示例:
{
"Error" : " No error " ,
"Code" : 0 ,
"Path" : " /UserFiles/Image/logo.png "
}
add
方法将上传的文件添加到指定路径。与其他方法不同,此方法必须返回封装在 HTML 中的 JSON 响应,因此响应的 MIME 类型是 text/html 而不是 text/plain。文件管理器中的上传表单将当前路径作为 POST 参数与上传的文件一起传递。响应包括路径以及用于存储文件的名称。上传的文件名应该可以安全地用作 URL 中的路径组件,因此至少要进行 URL 编码。
响应示例:
{
"Path" : " /UserFiles/Image/ " ,
"Name" : " new_logo.png " ,
"Error" : " No error " ,
"Code" : 0
}
replace
方法允许用户替换特定文件,无论新文件名如何 - 至少,新文件应具有与原始文件相同的扩展名。旧文件将被自动覆盖。与其他方法不同,此方法必须返回封装在 HTML 中的 JSON 响应,因此响应的 MIME 类型是 text/html 而不是 text/plain。文件管理器中的动态上传表单将当前文件路径作为 POST 参数与上传的文件一起传递。响应包括路径以及用于存储文件的名称。
响应示例:
{
"Path" : " /UserFiles/Image/ " ,
"Name" : " new_logo.png " ,
"Error" : " No error " ,
"Code" : 0
}
editfile
方法返回给定文件的内容(作为参数传递)。它使用户能够在线编辑文件(扩展名在配置文件中指定)。作为 GET 请求处理。
请求示例:
[path to connector]?mode=editfile&path=/UserFiles/MyFolder/myfile.txt
响应示例:
{
"Error" : " No error " ,
"Code" : 0 ,
"Path" : " /UserFiles/MyFolder/myfile.txt " ,
"Content" : "Content" : " Lorem ipsum dolor sit amet, consectetur adipiscing elit. rn P hasellus eu erat lorem. rnrn B ye! "
}
save
方法将覆盖当前文件的内容。文件管理器中的编辑表单将模式(如savefile
)、当前文件的路径和内容作为 POST 参数传递。
响应示例:
{
"Error" : " No error " ,
"Code" : 0 ,
"Path" : " /UserFiles/MyFolder/myfile.txt "
}
preview
方法为所请求的图像提供显示服务。图片路径通过path
参数传递。如果传递thumbnail=true
参数,该方法将返回图像缩略图。可以在 URL 中添加额外的参数(例如 UNIX 时间)以防止缓存问题。
请求示例:
[path to connector]?mode=preview&path=/UserFiles/new%20logo.png&thumbnail=true
addfolder
方法在服务器上的给定路径中创建一个新目录。
请求示例:
[path to connector]?mode=addfolder&path=/UserFiles/&name=new%20logo.png
响应示例:
{
"Parent" : " /UserFiles/ " ,
"Name" : " new_logo.png " ,
"Error" : " No error " ,
"Code" : 0
}
download
方法向用户提供所请求的文件。目前,我们使用“application/x-download”的 MIME 类型来强制下载文件而不是在浏览器中显示文件。将来,我们可能会对通常具有浏览器内查看器的特定文件类型进行例外处理,例如 PDF 和各种电影格式(Flash、Quicktime 等)。
请求示例:
[path to connector]?mode=download&path=/UserFiles/new%20logo.png
版权所有 (c) 2011-2013 Jason Huck、Simon Georget http://opensource.org/licenses/MIT
特此免费授予获得本软件和相关文档文件(“软件”)副本的任何人不受限制地使用本软件,包括但不限于使用、复制、修改、合并的权利、发布、分发、再许可和/或销售软件的副本,并允许向其提供软件的人员这样做,但须满足以下条件:
上述版权声明和本许可声明应包含在本软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途的适用性和不侵权的保证。在任何情况下,作者或版权持有者均不对因本软件或本软件中的使用或其他交易而产生或与之相关的任何索赔、损害或其他责任负责,无论是合同、侵权行为还是其他行为。软件。