FM é um gerenciador de arquivos de código aberto lançado sob licença do MIT. É uma alternativa ao elfinder ou CKFinder.
IMPORTANTE : Este pacote está obsoleto .
Agora, use o pacote RichFileManager com vários novos recursos e melhorias.
O gerenciador de arquivos está sob licença gratuita. Se você quiser apoiar o desenvolvimento do gerenciador de arquivos ou apenas agradecer ao seu principal mantenedor pagando uma cerveja, você pode fazer uma doação clicando no seguinte botão:
O Filemanager está altamente documentado nas páginas wiki. API, veja abaixo.
Preâmbulo
Como muitas mudanças foram feitas recentemente, apenas conectores PHP e MVC estão disponíveis agora. Você pode experimentar a versão mais recente para outros conectores, mas sem garantia eles implementam todos os recursos e funcionam corretamente.
Para usar outros conectores, baixe a versão v0.8 em https://github.com/simogeo/Filemanager/archive/v0.8.zip (conectores PHP, ASHX, ASP, CFM, lasso, PL e JSP estão disponíveis)
Uma implementação do conector JSP/Java está disponível em: https://github.com/th-schwarz/C5Connector.Java
(1) Confira uma cópia do FileManager do repositório usando Git:
clone do git http://github.com/simogeo/Filemanager.git
ou baixe o arquivo do Github: https://github.com/simogeo/Filemanager/archive/master.zip
Você pode colocar o FileManager em qualquer lugar do diretório raiz do serviço da web.
(2) Faça uma cópia do arquivo de configuração padrão ("filemanager.config.default.json" localizado no diretório de scripts), removendo o '.default' do final do nome do arquivo, e edite as opções de acordo com o seguinte wiki página: https://github.com/simogeo/Filemanager/wiki/Filemanager-configuration-file Dar uma olhada no estudo de casos de configuração também pode ser útil para você: https://github.com/simogeo/Filemanager/wiki/Specify-user-folder%2C-configuration-cases
(3a) Se você estiver integrando o FileManager com o FCKEditor, abra seu arquivo fckconfig.js e encontre as linhas que especificam qual navegador de arquivos usar para imagens, links, etc. Você precisará alterar linhas como esta:
FCKConfig . ImageBrowser = false ;
FCKConfig . ImageBrowserURL = FCKConfig . BasePath + 'filemanager/browser/default/browser.html?Type=Image&Connector=../../connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ;
...para isto:
FCKConfig . ImageBrowser = true ;
FCKConfig . ImageBrowserURL = '[Path to Filemanager]/index.html' ;
(3b) Se você estiver integrando o FileManager com CKEditor 3.x ou superior, basta definir a URL ao configurar sua instância, assim:
CKEDITOR . replace ( 'instancename' , {
filebrowserBrowseUrl : '[Path to Filemanager]/index.html' ,
... other configuration options . . .
} ) ;
Se você quiser usar o modo de diálogo modal (em vez de pop-up), consulte a página wiki dedicada.
(3c) Se você estiver integrando o FileManager com TinyMCE (>= 3.0), você deve:
Crie uma função de retorno de chamada Javascript que abrirá a página base index.html do FileManager (veja o URL abaixo para obter exemplos). Adicione uma linha como: "file_browser_callback: 'name_of_callback_function'" no comando tinyMCE.init Consulte http://www.tinymce.com /wiki.php/TinyMCE3x:How-to_implement_a_custom_file_browser para mais detalhes.
Veja também a página wiki dedicada, com amostra do TinyMCE 4: https://github.com/simogeo/Filemanager/wiki/How-to-use-the-Filemanager-with-tinyMCE-3-or-4
(4) Por último, mas não menos importante, preocupe-se com a segurança !
Para conector PHP : copie/cole /connectors/php/default.config.php
em /connectors/php/user.config.php
para definir sua própria função de autenticação. Para fazer isso, você encontrará um exemplo na página wiki dedicada.
Dependência e compatibilidade do jQuery
Tentamos continuar atualizando a biblioteca principal do jQuery regularmente. Se, por algum motivo, você não puder usar a versão jQuery incorporada agora mesmo, o Filemanager provavelmente funcionará com uma versão jQuery >= 1.6. Você terá que usar o plugin jQuery.migrate() para usá-lo com o jQuery versão 1.9+.
Importante : O Filemanager foi projetado para funcionar sem nenhuma configuração especial, mas usá-lo sem nenhuma configuração é MUITO inseguro . Configure sua própria função de autenticação , com base no arquivo padrão e consultando a página wiki dedicada.
Você pode criar um conector para o idioma de sua preferência no servidor seguindo esta API simples. Você deve ter um script no seguinte local que possa responder a solicitações HTTP GET retornando um objeto JSON apropriado:
[path to FileManager]/connectors/[language extension]/filemanager.[language extension]
Atualmente, o FileManager inclui conectores para PHP, MVC, JSP, lasso, ASP, ASHX, PL e CFM nos seguintes locais:
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
Contanto que exista um script neste local para responder às solicitações, você poderá dividir o código (bibliotecas externas, arquivos de configuração, etc.) da maneira que achar melhor.
Cada resposta deve incluir duas chaves específicas para tratamento de erros: Erro e Código. Se ocorrer um erro em seu script, você poderá preencher essas chaves com os valores que achar mais apropriados. Se não houver erro, Erro deverá permanecer vazio ou nulo e Código deverá estar vazio, nulo ou zero (0). Não use zero para erros reais. O exemplo a seguir seria uma resposta apropriada se o conector usar um arquivo externo para configuração (recomendado), mas esse arquivo não puder ser encontrado:
{
"Error" : " Configuration file missing. " ,
"Code" : -1
}
Seu script deve incluir suporte para os seguintes métodos/funções. As solicitações GET do FileManager incluem um parâmetro "mode" que indicará qual tipo de resposta retornar. Parâmetros adicionais fornecerão outras informações necessárias para atender à solicitação, como o diretório atual.
O método getinfo
retorna informações sobre um único arquivo. Solicitações com modo "getinfo" incluirão um parâmetro adicional, "caminho", indicando qual arquivo inspecionar. Um parâmetro booleano "getsize" indica se as dimensões do arquivo (se for uma imagem) devem ser retornadas.
Solicitação de exemplo:
[path to connector]?mode=getinfo&path=/UserFiles/Image/logo.png&getsize=true
Exemplo de resposta:
{
"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
}
As chaves são as seguintes:
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.
O método getfolder
retorna uma matriz de objetos de arquivo e pasta que representam o conteúdo de um determinado diretório (indicado por um parâmetro "caminho"). Deve chamar o método getinfo para recuperar as propriedades de cada arquivo. Um parâmetro booleano "getsizes" indica se as dimensões da imagem devem ser retornadas para cada item. As pastas devem sempre ser retornadas antes dos arquivos. Opcionalmente, um parâmetro "type" pode ser especificado para restringir os arquivos retornados (dependendo do conector). Se um parâmetro "type" for fornecido para o URL index.html principal, o mesmo valor do parâmetro será reutilizado e passado para getfolder. Isto pode ser usado, por exemplo, para mostrar apenas arquivos de imagem em uma árvore do sistema de arquivos.
Solicitação de exemplo:
[path to connector]?mode=getfolder&path=/UserFiles/Image/&getsizes=true&type=images
Exemplo de resposta:
{
"/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
}
}
Cada chave na matriz é o caminho para um item individual e o valor é o objeto de arquivo desse item.
O método rename
renomeia o item no caminho fornecido no parâmetro "antigo" com o nome fornecido no parâmetro "novo" e retorna um objeto indicando os resultados daquela ação.
Solicitação de exemplo:
[path to connector]?mode=rename&old=/UserFiles/Image/logo.png&new=id.png
Exemplo de resposta:
{
"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 "
}
O método move
move o arquivo ou diretório "antigo" para o diretório "novo" especificado. É possível especificar o caminho absoluto do diretório fileRoot ou o caminho relativo do item "antigo". O valor "root" é obrigatório para garantir que os caminhos relativos não fiquem acima do fileRoot.
Solicitação de exemplo: mover arquivo
[path to connector]?mode=move&old=/uploads/images/original/Image/logo.png&new=/moved/&root=/uploads/images/
Exemplo de resposta:
{
"Error" : " No error " ,
"Code" : 0 ,
"Old Path" : " /uploads/images/original/Image/ " ,
"Old Name" : " logo.png " ,
"New Path" : " /uploads/images/moved/ " ,
"New Name" : " logo.png "
}
Exemplo de solicitação: mover o diretório para um diretório não existente (será criado)
[path to connector]?mode=move&old=/uploads/images/original/Image&new=../new_dir/&root=/uploads/images/
Exemplo de resposta:
{
"Error" : " No error " ,
"Code" : 0 ,
"Old Path" : " /uploads/images/original/ " ,
"Old Name" : " Image " ,
"New Path" : " /uploads/new_dir/ " ,
"New Name" : " Image "
}
O método delete
exclui o item no caminho fornecido.
Solicitação de exemplo:
[path to connector]?mode=delete&path=/UserFiles/Image/logo.png
Exemplo de resposta:
{
"Error" : " No error " ,
"Code" : 0 ,
"Path" : " /UserFiles/Image/logo.png "
}
O método add
adiciona o arquivo carregado ao caminho especificado. Ao contrário dos outros métodos, este método deve retornar sua resposta JSON envolvida em um HTML , portanto, o tipo MIME da resposta é text/html em vez de text/plain. O formulário de upload no Gerenciador de arquivos passa o caminho atual como um parâmetro POST junto com o arquivo carregado. A resposta inclui o caminho e também o nome usado para armazenar o arquivo. O nome do arquivo enviado deve ser seguro para uso como um componente de caminho em um URL, portanto, no mínimo codificado em URL.
Exemplo de resposta:
{
"Path" : " /UserFiles/Image/ " ,
"Name" : " new_logo.png " ,
"Error" : " No error " ,
"Code" : 0
}
O método replace
permite ao usuário substituir um arquivo específico qualquer que seja o novo nome do arquivo - pelo menos, o novo arquivo deve ter a mesma extensão do original. O arquivo antigo é substituído automaticamente. Ao contrário dos outros métodos, este método deve retornar sua resposta JSON envolvida em um HTML , portanto, o tipo MIME da resposta é text/html em vez de text/plain. O formulário de upload dinâmico no Gerenciador de arquivos passa o caminho do arquivo atual como um parâmetro POST junto com o arquivo carregado. A resposta inclui o caminho e também o nome usado para armazenar o arquivo.
Exemplo de resposta:
{
"Path" : " /UserFiles/Image/ " ,
"Name" : " new_logo.png " ,
"Error" : " No error " ,
"Code" : 0
}
O método editfile
retorna o conteúdo de um determinado arquivo (passado como parâmetro). Dá ao usuário a capacidade de editar um arquivo online (as extensões são especificadas no arquivo de configuração). Tratado como solicitação GET.
Solicitação de exemplo:
[path to connector]?mode=editfile&path=/UserFiles/MyFolder/myfile.txt
Exemplo de resposta:
{
"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! "
}
O método save
substituirá o conteúdo do arquivo atual. O formulário de edição no Gerenciador de Arquivos passa o modo (como savefile
), caminho do arquivo atual e o conteúdo como parâmetros POST.
Exemplo de resposta:
{
"Error" : " No error " ,
"Code" : 0 ,
"Path" : " /UserFiles/MyFolder/myfile.txt "
}
O método preview
exibe a imagem solicitada para exibição. O caminho da imagem é passado pelo parâmetro path
. Se o parâmetro thumbnail=true
for passado, o método retornará uma miniatura da imagem. Um parâmetro extra, como horário UNIX, pode ser adicionado à URL para evitar problemas de cache.
Solicitação de exemplo:
[path to connector]?mode=preview&path=/UserFiles/new%20logo.png&thumbnail=true
O método addfolder
cria um novo diretório no servidor dentro do caminho fornecido.
Solicitação de exemplo:
[path to connector]?mode=addfolder&path=/UserFiles/&name=new%20logo.png
Exemplo de resposta:
{
"Parent" : " /UserFiles/ " ,
"Name" : " new_logo.png " ,
"Error" : " No error " ,
"Code" : 0
}
O método download
fornece o arquivo solicitado ao usuário. Atualmente usamos um tipo MIME de "application/x-download" para forçar o download do arquivo em vez de exibi-lo em um navegador. No futuro, poderemos abrir exceções para tipos de arquivos específicos que geralmente possuem visualizadores no navegador, como PDFs e vários formatos de filmes (Flash, Quicktime, etc.).
Solicitação de exemplo:
[path to connector]?mode=download&path=/UserFiles/new%20logo.png
Copyright (c) 2011-2013 Jason Huck, Simon Georget http://opensource.org/licenses/MIT
É concedida permissão, gratuitamente, a qualquer pessoa que obtenha uma cópia deste software e dos arquivos de documentação associados (o "Software"), para negociar o Software sem restrições, incluindo, sem limitação, os direitos de usar, copiar, modificar, mesclar , publicar, distribuir, sublicenciar e/ou vender cópias do Software e permitir que as pessoas a quem o Software seja fornecido o façam, sujeito às seguintes condições:
O aviso de direitos autorais acima e este aviso de permissão serão incluídos em todas as cópias ou partes substanciais do Software.
O SOFTWARE É FORNECIDO "COMO ESTÁ", SEM GARANTIA DE QUALQUER TIPO, EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UM DETERMINADO FIM E NÃO VIOLAÇÃO. EM HIPÓTESE ALGUMA OS AUTORES OU DETENTORES DE DIREITOS AUTORAIS SERÃO RESPONSÁVEIS POR QUALQUER RECLAMAÇÃO, DANOS OU OUTRA RESPONSABILIDADE, SEJA EM UMA AÇÃO DE CONTRATO, ATO ILÍCITO OU DE OUTRA FORMA, DECORRENTE DE, OU EM CONEXÃO COM O SOFTWARE OU O USO OU OUTRAS NEGOCIAÇÕES NO SOFTWARE.