Описание протокола клиент-сервер

Коннектор (connector) - обрабатывается на сервере (PHP, Python). Клиент (client) - обрабатывается на стороне пользователя в браузере (JavaScript). Когда пользователь выполняет какое-либо действие с файлами клиент отправляет на сервер (в коннектор) запрос и получает ответ. Коннектор получает данные от клиента через GET или через POST (только при загрузке upload и редактировании edit). Коннектор всегда возвращает клиенту объект JSON.

Обязятельный параметр, всегда ожидаемый коннектором - cmd - имя команды, пример: http://localhost/connector.php?cmd=open

Общие параметры, часто передаваемые коннектору:
  • current : (String) hash пути текущей директории
  • target : (String) hash пути файла над которым совержается действие
  • targets : (Array) массив hash'ей путей файлов/директорий над которыми совершается действие
Для любой команды ответ коннектора может содержать следующие параметры:
  • error : (String) строка с сообщением об ошибке
  • errorData : (Object) объект с сообщениями о нефатальных ошибках, ключ - имя файла/директори, значение - сообщение об ошибке
  • select : (Array) массив hash'ей файлов/директорий, которые необходимо выделить после выполнения команды (upload, mkdir, mkfile и т.д.)
  • debug : (Object) объект с отладочной информацией
Команды клиентской части не полностью совпадают с командами коннектора:
  • reload, back - реализуются серверной командой open
  • list, icons, quicklook, copy, cut - работают только на клиенте и не обращаются к коннектору

Любая команда, получившая некорректные аргументы, прекращает дальнейшее выполнение и возвращает error (сообщение об ошибке); исключение open - возвращает сообщение об ошибке и контент корневой директории.

Внимание! Пути к файлам не передаются в чистом виде, только hash от пути (md5 или любая другая hash-функция).

Инициализация файлового менеджера

Аргументы передаваемые клиентом коннектору (клиент -> сервер):
  • cmd : open
  • init : true
  • tree : true

Пример: http://localhost:8001/~troex/cgi/connector.py?cmd=open&init=true&tree=true

Ответ (сервер -> клиент): смотрите описание команды open, плюс дополнительно ответ включает:

  • disabled : (Array) список отключенных команд
  • params: (Object)
    • dotFiles : (Boolean) разрешено ли показывать скрытые файлы, начинающиеся с точки
    • uplMaxSize : (String) макимальный разрешенный размер загружаемых файлов (например: 128M)
    • archives : (Array) Список mime-типов архивов, которые могут быть созданы коннектором
    • extract : (Array) Список mime-типов архивов, которые коннектор может распаковать
    • url : (String) URL где расположен корень файлов коннектора

Пример корректного ответа:

JSON:

  1 {
  2     "cwd": {
  3         "name"  : "Home",
  4         "hash"  : "b4473c8c08d1d499ecd7112f3398f125",
  5         "rel"   : "Home",
  6         "date"  : "30 Jan 2010 14:25",
  7         "mime"  : "directory",
  8         "size"  : 0,
  9         "read"  : true,
 10         "write" : true,
 11         "rm"    : false
 12     },
 13     "cdc": [
 14     {
 15         "name"  : "test",
 16         "hash"  : "ac4b61565950a73395c871f9c3fc7362",
 17         "date"  : "Today 14:11",
 18         "mime"  : "directory",
 19         "size"  : 102,
 20         "read"  : true,
 21         "write" : true,
 22         "rm"    : true
 23     },
 24     {
 25         "name"  : "link to README", 
 26         "hash"  : "4fc059e61577f0267fbd6c1c5bafb1b4", 
 27         "url"   : "http://localhost:8001/~troex/git/elfinder/files/wiki/README.txt", 
 28         "date"  : "Today 16:50", 
 29         "mime"  : "text/plain", 
 30         "size"  : 10, 
 31         "read"  : true, 
 32         "write" : true, 
 33         "rm"    : true, 
 34         "link"  : "8d331825ebfbe1ddae14d314bf81a712", 
 35         "linkTo": "Home/README.txt", 
 36         "parent": "b4473c8c08d1d499ecd7112f3398f125" 
 37     }, 
 38     {
 39         "name"  : "logo.png", 
 40         "hash"  : "a696323d7fd86513754004ba8bc12967", 
 41         "url"   : "http://localhost:8001/~troex/git/elfinder/files/wiki/logo.png", 
 42         "date"  : "11 Nov 2009 21:57", 
 43         "mime"  : "image/png", 
 44         "size"  : 18782, 
 45         "read"  : true, 
 46         "write" : true, 
 47         "rm"    : true
 48     }, 
 49     {
 50         "name"  : "README.txt",
 51         "hash"  : "8d331825ebfbe1ddae14d314bf81a712",
 52         "url"   : "http://localhost:8001/~troex/git/elfinder/files/wiki/README.txt",
 53         "date"  : "Today 14:25",
 54         "mime"  : "text/plain",
 55         "size"  : 1171,
 56         "read"  : true,
 57         "write" : true,
 58         "rm"    : true
 59     }
 60     ],
 61     "tree": {
 62         "name"  : "Home",
 63         "hash"  : "b4473c8c08d1d499ecd7112f3398f125",
 64         "read"  : true,
 65         "write" : true,
 66         "dirs"  : [
 67         {
 68             "name"  : "test",
 69             "hash"  : "ac4b61565950a73395c871f9c3fc7362",
 70             "read"  : true,
 71             "write" : true,
 72             "dirs"  : [
 73             {
 74                 "name"  : "test2",
 75                 "hash"  : "b3615611cf9f8f6a8821ef20eda450b5",
 76                 "read"  : true,
 77                 "write" : true,
 78                 "dirs"  : []
 79             }
 80             ]
 81         }
 82         ],
 83     },
 84     "disabled"  : [],
 85     "params"    : {
 86         "url"        : "http://localhost:8001/~troex/git/elfinder/files/wiki",
 87         "dotFiles"   : true,
 88         "uplMaxSize" : "15M",
 89         "extract"    : [
 90             "application/x-7z-compressed",
 91             "application/x-tar",
 92             "application/x-gzip",
 93             "application/x-bzip2",
 94             "application/zip" 
 95         ],
 96         "archives"   : [
 97             "application/x-7z-compressed",
 98             "application/x-tar",
 99             "application/x-gzip",
100             "application/x-bzip2",
101             "application/zip" 
102         ]
103     }
104 }

Список команд

open - открыть директорию или вывести содержимое файла в браузер
mkdir - создать директорию
mkfile - создать текстовый файл
rename - переименовать директорию или файл
upload - загрузить файлы
ping - служебная команда. необходима для Safari (загрузка файлов)
paste - скопировать или переместить файлы/директории в указанную директорию
rm - удалить директорию/файлы
duplicate - сделать копию директории/файла
read - вернуть содержимое текстового файла
edit - сохранить текст в файл
extract - распаковать архив
archive - сжать директории/файлы в архив
tmb - создать миниатюрки для картинок, не имеющих их
resize - изменить размер изображения

Описание команд

open

Возвращает содержимое директории или выводит файл в браузер.

1. Открытие директории

Аргументы:
  • cmd : open
  • target : hash пути директории
  • tree : Не обязательный параметр. Если задан - дополнительно вернуть дерево директорий

Ответ должен содержать (Object) cwd и массив (Array) cdc, дополнительно может присутствовать (Object) tree, пример:

 1 {
 2     "cwd" : { // (Object) Current Working Directory - Информация о текущей директории
 3         "name"  : "Home",                             // (String)  Имя директории
 4         "hash"  : "b4473c8c08d1d499ecd7112f3398f125", // (String)  hash от абсолютного пути директории
 5         "mime"  : "directory",                        // (String)  всегда "directory" 
 6         "rel"   : "Home",                             // (String)  относительный путь до текущей директории
 7         "size"  : 0,                                  // (Number)  размер директории в байтах
 8         "date"  : "30 Jan 2010 14:25",                // (String)  время изменения (mtime)
 9         "read"  : true,                               // (Boolean) право на чтение
10         "write" : true,                               // (Boolean) право на запись
11         "rm"    : false                               // (Boolean) право на удаление
12     },
13     "cdc" : [ // (Array) (of Objects) Current Directory Content - Информация о содержимом текущей директории
14     {
15         "name"  : "link to README",                   // (String)  Имя директории/файла
16         "hash"  : "4fc059e61577f0267fbd6c1c5bafb1b4", // (String)  hash
17         "url"   : "http://localhost:8001/~troex/git/elfinder/files/wiki/README.txt", // (String) URL
18         "date"  : "Today 16:50",                      // (String)  время изменения (mtime)
19         "mime"  : "text/plain",                       // (String)  MIME тип файла или "directory" 
20         "size"  : 10,                                 // (Number)  размер файла/директории в байтах
21         "read"  : true,                               // (Boolean) право на чтение
22         "write" : true,                               // (Boolean) право на запись
23         "rm"    : true,                               // (Boolean) право на удаление
24         "link"  : "8d331825ebfbe1ddae14d314bf81a712", // (String)  только для ссылок, hash файла
25                                                       //           на который ведёт ссылка
26         "linkTo": "Home/README.txt",                  // (String)  только для ссылок, относительный путь
27                                                       //           до файла, на который указывает ссылка
28         "parent": "b4473c8c08d1d499ecd7112f3398f125"  // (String)  только для ссылок, hash директории
29                                                       //           в который находиться файл, на который
30                                                       //           указывает ссылка
31     },
32     {
33         // ...
34     }
35     ],
36     "tree" : { // (Object) Дерево директорий. Не обязательный параметр, только если был передан аргумент "tree" 
37         "name"  : "Home",                             // (String)  Имя директории
38         "hash"  : "b4473c8c08d1d499ecd7112f3398f125", // (String)  hash
39         "read"  : true,                               // (Boolean) право на чтение
40         "write" : true,                               // (Boolean) право на запись
41         "dirs"  : [                                   // (Array) (of Objects) массив дочерних директории
42         {
43             "name"  : "test",
44             "hash"  : "ac4b61565950a73395c871f9c3fc7362",
45             "read"  : true,
46             "write" : true,
47             "dirs"  : [
48             {
49                 // ...
50             },
51             {
52                 // ...
53             }
54             ]
55         }
56     }
57 }

Внимание! Если передан некорректный аргумент target, возвращает контент корневой директории (cdc, cdw) и сообщение об ошибке (error).

2. Открытие файла (вывод содержимого в браузер).

Аргументы:
  • cmd : open
  • target : hash пути файла
  • current : hash пути к директории, где находится файл

Ответ:

Файл выводится в браузер с соответствующими заголовками.

mkdir

Создать новую директорию.

Аргументы:
  • cmd : mkdir
  • current : hash директории, в которой создаем новую директорию
  • name : имя новой директории

Ответ: open с деревом директорий tree и select - hash новой директории

 1 {
 2     // open
 3     "cwd"   : {
 4         // ...
 5     },
 6     "cdc"   : [
 7         // ...
 8     ],
 9     "tree"  : {
10         // ...
11     },
12     "select": "ac4b61565950a73395c871f9c3fc7362" // (String) hash новой директории
13 }

mkfile

Создать новый файл.

Аргументы:
  • cmd : mkfile
  • current : hash директории, в которой создаем файл
  • name : имя нового файла

Ответ: open и select - hash нового файла

rename

Переименование директории/файла

Аргументы:
  • cmd : rename
  • current : hash директории, где файл находится
  • target : hash директории/файла для переименования
  • name : новое имя директории/файла

Ответ: open (если переименовали директорию, то open возвращается с деревом директорий) и select - hash переименованной директории/файла

upload

Загрузка файлов

Аргументы (передаются методом POST):
  • cmd : upload
  • current : hash директории, в которую загружаем файлы
  • targets : массив файлов

Ответ:

1. Если ни одного файла не удалось загрузить, возвращаем только

1 {
2     "error" : "Unable to upload files" 
3 }

2. Если хотя бы один файл был загружен, ответ open и select. Если не были загружены не все файлы от выведутся сообщения об ошибках error и errorData:

1 {
2     // open
3     "select"    : [ "8d331825ebfbe1ddae14d314bf81a712" ], // (Array)  массив hash'ей путей загруженных файлов
4     "error"     : "Some files was not uploaded",          // (String) если не все файлы были загружены
5     "errorData" : {                                       // (Object) инф. о файлах, которые не удалось загрузить
6         "some-file.exe" : "Not allowed file type"         // (String) "имя файла": "ошибка" 
7     }
8 }

ping

Служебная команда, необходима для исправления бага Safari при загрузке файлов http://www.webmasterworld.com/macintosh_webmaster/3300569.htm

Аргументы:
  • cmd : ping

Ответ: отсылает пустую страницу с заголовком Connection: close

paste

Копирует или перемещает директории/файлы

Аргументы:
  • cmd : paste
  • src : hash директории, из которой перемещаем/копируем файлы
  • dst : hash директории, в которую перемещаем/копируем файлы
  • targets : массив hash'ей копируемых директорий/файлов
  • cut : 1 если файлы перемещаются, аргумент отсутствует если файлы копируются

Ответ:
Если копирование/перемещение прошло успешно, возвращает open с деревом директорий, если нет, то к ответу добавляются сообдения об ошибках error и errorData

Внимание! Команда должна прекращать копирование при первой же ошибке. Не допускается перезапись файлов/директорий с одинаковыми именами.

rm

Удаление файлов и рекурсивное удаление директорий

Аргументы:
  • cmd : rm
  • current : hash директории, из которой удалем файлы
  • targets : массив hash'ей удаляемых директорий/файлов

Ответ: open с деревом директорий, при ошибках error и errorData.

duplicate

Создает копию директории/файла. Имя копии формируется следующим образом: базовое_имя_файла copy+порядковый номер.расширение (если есть)

Аргументы:
  • cmd : duplicate
  • current : hash директории, в которой создаем дубликат
  • target : hash директории/файла, для которого создаем дубликат

Ответ: open (если скопировали директорию, то open возвращается с деревом директорий), select - hash пути дубликата.

read

Возвращает содержимое текстового файла.

Аргументы:
  • cmd : edit
  • current : hash директории, в которой читаем файл
  • target : hash файла

Ответ: content - содержимое текстового файла

1 {
2     "content": "Hello world!" // (String) содержимое текстового фала 
3 }

edit

Сохраняет полученный текст в файл.

Аргументы (передаются методом POST):
  • cmd : edit
  • current : hash директории, в которой сохраняется файл
  • target : hash файла
  • content : новое содержимое файла

Ответ: file - объект, аналогичный описывающему файл в секции cdc команды open

 1 {
 2     "file" : {
 3         "name"  : "README.txt",
 4         "hash"  : "8d331825ebfbe1ddae14d314bf81a712",
 5         "url"   : "http://localhost:8001/~troex/git/elfinder/files/wiki/README.txt",
 6         "date"  : "Today 14:25",
 7         "mime"  : "text/plain",
 8         "size"  : 1171,
 9         "read"  : true,
10         "write" : true,
11         "rm"    : true
12     }
13 }

extract

Распаковывает архив.

Аргументы:
  • cmd : extract
  • current : hash директории, в которой находится файл
  • target : hash файла архива

Ответ: open с деревом директорий

archive

Упаковывает директории/файлы в архив.

Аргументы:
  • cmd : archive
  • type : mime-тип создаваемого архива
  • current : hash директории, в которой находятся добавляемые в архив директории/файлы
  • targets : массив хэшей директорий/файлов

Ответ: open, select - hash нового архива

tmb

Фоновая команда. Создает миниатюрки для картинок, не имеющих их. Кол-во создаваемых за раз миниатюрок, указывается в конфиге коннектора опцией tmbAtOnce. По умолчанию - 5.

Аргументы:
  • cmd : tmb
  • current : hash пути к директории, в которой создаем миниатюрки

Ответ:

 1 {
 2     "current": "b4473c8c08d1d499ecd7112f3398f125", // (String) hash пути к директории, в которой были созданы миниатюрки
 3     "images" : {                                   // (Object)
 4         "a696323d7fd86513754004ba8bc12967":        // (String) hash пути файла
 5             "http://localhost:8001/~troex/git/elfinder/files/.tmb/a696323d7fd86513754004ba8bc12967.png" 
 6                                                    // (String) URL миниатюрки
 7     }, 
 8     "tmb": true  // (Boolean) возвращает true если ещё остались картинки для которых не были созданы миниатюрки,
 9                  // иначе параметр отсутствует
10 }

resize

Изменение размера изображения.

Аргументы:
  • cmd : resize
  • current : hash директории, в которой находится файл
  • target : hash пути изображения
  • width : новая ширина изображения
  • height : новая высота изображения

Ответ: open, select - hash пути изображения

elFinder-init.png (41 KB) Troex Nevelin, 31.01.2010 18:16

Also available in: HTML TXT