FM — файловый менеджер с открытым исходным кодом, выпущенный под лицензией MIT. Это альтернатива elfinder или CKFinder.
ВАЖНО : Этот пакет УСТАРЕВШИЙ .
Теперь используйте пакет RichFileManager с рядом новых функций и улучшений.
Файловый менеджер находится под свободной лицензией. Если вы хотите поддержать разработку файлового менеджера или просто поблагодарить его главного сопровождающего, заплатив пиво, вы можете сделать пожертвование, нажав следующую кнопку:
Файловый менеджер подробно описан на страницах вики. API, см. ниже.
Преамбула
Поскольку в последнее время было внесено много изменений, теперь доступны только коннекторы PHP и MVC. Вы можете попробовать последнюю версию для других разъемов, но без гарантии они реализуют все функции и работают правильно.
Чтобы использовать другие соединители, загрузите версию v0.8 с https://github.com/simogeo/Filemanager/archive/v0.8.zip (доступны соединители PHP, ASHX, ASP, CFM, lasso, PL и JSP).
Реализация соединителя JSP/Java доступна по адресу: https://github.com/th-schwarz/C5Connector.Java.
(1) Получите копию FileManager из репозитория с помощью Git:
git-клон http://github.com/simogeo/Filemanager.git
или загрузите архив с Github: https://github.com/simogeo/Filemanager/archive/master.zip.
Вы можете разместить FileManager в любом месте корневого каталога вашего веб-сервиса.
(2) Создайте копию файла конфигурации по умолчанию («filemanager.config.default.json», расположенного в каталоге сценариев), удалив «.default» в конце имени файла, и отредактируйте параметры в соответствии со следующей вики. страница: 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 . . .
} ) ;
Если вы хотите использовать модальный диалоговый режим (вместо всплывающего окна), обратитесь к специальной вики-странице.
(3c) Если вы интегрируете FileManager с TinyMCE (>= 3.0), вам следует:
Создайте функцию обратного вызова Javascript, которая откроет базовую страницу FileManager index.html (примеры см. в URL-адресе ниже). Добавьте строку типа: «file_browser_callback : 'name_of_callback_function'» в команду tinyMCE.init. См. http://www.tinymce.com /wiki.php/TinyMCE3x:How-to_implement_a_custom_file_browser для получения более подробной информации.
См. также специальную вики-страницу с примером 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
, чтобы определить собственную функцию аутентификации. Для этого вы найдете пример на специальной вики-странице.
Зависимость и совместимость jQuery
Мы стараемся регулярно обновлять основную библиотеку jQuery. Если по какой-либо причине вы не можете использовать встроенную версию jQuery сейчас, поскольку файловый менеджер, вероятно, будет работать с версией jQuery >= 1.6. Вам придется использовать плагин jQuery.migrate(), чтобы использовать его с версией jQuery 1.9+.
Важно : Файловый менеджер предназначен для работы без какой-либо специальной настройки, но использовать его без какой-либо настройки ОЧЕНЬ небезопасно . Пожалуйста, настройте свою собственную функцию аутентификации на основе файла по умолчанию и со ссылкой на специальную вики-страницу.
Вы можете создать соединитель для выбранного вами языка на стороне сервера, воспользовавшись этим простым API. У вас должен быть сценарий по следующему адресу, который может отвечать на запросы HTTP GET, возвращая соответствующий объект JSON:
[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 должно оставаться пустым или нулевым, а значение Code должно быть пустым, нулевым или нулевым (0). Не используйте ноль для любых фактических ошибок. Следующий пример будет подходящим ответом, если соединитель использует внешний файл для конфигурации (рекомендуется), но этот файл не может быть найден:
{
"Error" : " Configuration file missing. " ,
"Code" : -1
}
Ваш скрипт должен включать поддержку следующих методов/функций. Запросы GET от FileManager включают параметр «режим», который указывает, какой тип ответа следует возвращать. Дополнительные параметры предоставят другую информацию, необходимую для выполнения запроса, например текущий каталог.
Метод 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
возвращает массив объектов файлов и папок, представляющих содержимое данного каталога (указанного параметром «путь»). Он должен вызвать метод getinfo для получения свойств каждого файла. Логический параметр getsizes указывает, следует ли возвращать размеры изображения для каждого элемента. Папки всегда следует возвращать перед файлами. При желании можно указать параметр «тип», чтобы ограничить возвращаемые файлы (в зависимости от соединителя). Если для основного URL-адреса index.html указан параметр «тип», то же значение параметра используется повторно и передается в 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
переименовывает элемент по пути, указанному в «старом» параметре, на имя, указанное в «новом» параметре, и возвращает объект, указывающий результаты этого действия.
Пример запроса:
[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
добавляет загруженный файл по указанному пути. В отличие от других методов, этот метод должен возвращать ответ JSON, завернутый в HTML , поэтому MIME-тип ответа — text/html вместо text/plain. Форма загрузки в файловом менеджере передает текущий путь в качестве параметра POST вместе с загруженным файлом. Ответ включает путь, а также имя, используемое для хранения файла. Имя загруженного файла должно быть безопасным для использования в качестве компонента пути в URL-адресе, поэтому оно должно быть как минимум закодировано в URL-адресе.
Пример ответа:
{
"Path" : " /UserFiles/Image/ " ,
"Name" : " new_logo.png " ,
"Error" : " No error " ,
"Code" : 0
}
Метод replace
позволяет пользователю заменить определенный файл независимо от нового имени файла - по крайней мере, новый файл должен иметь то же расширение, что и оригинал. Старый файл автоматически перезаписывается. В отличие от других методов, этот метод должен возвращать ответ JSON, завернутый в HTML , поэтому 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
передает пользователю запрошенный файл. В настоящее время мы используем MIME-тип «application/x-download», чтобы принудительно загружать файл, а не отображать его в браузере. В будущем мы можем сделать исключения для определенных типов файлов, которые часто имеют средства просмотра в браузере, например PDF-файлы и различные форматы фильмов (Flash, Quicktime и т. д.).
Пример запроса:
[path to connector]?mode=download&path=/UserFiles/new%20logo.png
Copyright (c) 2011–2013 Джейсон Хак, Саймон Джорджет http://opensource.org/licenses/MIT
Настоящим бесплатно любому лицу, получившему копию этого программного обеспечения и связанных с ним файлов документации («Программное обеспечение»), предоставляется разрешение на работу с Программным обеспечением без ограничений, включая, помимо прочего, права на использование, копирование, изменение, объединение. публиковать, распространять, сублицензировать и/или продавать копии Программного обеспечения, а также разрешать лицам, которым предоставлено Программное обеспечение, делать это при соблюдении следующих условий:
Вышеупомянутое уведомление об авторских правах и данное уведомление о разрешении должны быть включены во все копии или существенные части Программного обеспечения.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЯМИ ТОВАРНОЙ ЦЕННОСТИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ И НЕНАРУШЕНИЯ ПРАВ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОРЫ ИЛИ ОБЛАДАТЕЛИ АВТОРСКИХ ПРАВ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПРЕТЕНЗИИ, УБЫТКИ ИЛИ ДРУГУЮ ОТВЕТСТВЕННОСТЬ, БУДЬ В ДЕЙСТВИЯХ ПО КОНТРАКТУ, ПРАВОНАРУШЕНИЮ ИЛИ ДРУГИМ ОБРАЗОМ, ВОЗНИКАЮЩИЕ ОТ, ИЗ ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ СДЕЛКАМИ, ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ.