FM es un administrador de archivos de código abierto publicado bajo licencia MIT. Es una alternativa a elfinder o CKFinder.
IMPORTANTE : Este paquete está DESPRECADO .
Ahora, utilice el paquete RichFileManager con una serie de nuevas funciones y mejoras.
Filemanager tiene licencia gratuita. Si quieres apoyar el desarrollo del administrador de archivos o simplemente agradecer a su mantenedor principal pagando una cerveza, puedes hacer una donación haciendo clic en el siguiente botón:
Filemanager está muy documentado en las páginas wiki. API, ver más abajo.
Preámbulo
Dado que se han realizado muchos cambios recientemente, ahora sólo están disponibles los conectores PHP y MVC. Puedes probar la última versión para otros conectores, pero sin garantía implementan todas las funciones y funcionan correctamente.
Para utilizar otros conectores, descargue la versión v0.8 desde https://github.com/simogeo/Filemanager/archive/v0.8.zip (hay disponibles conectores PHP, ASHX, ASP, CFM, lasso, PL y JSP)
Una implementación del conector JSP/Java está disponible en: https://github.com/th-schwarz/C5Connector.Java
(1) Obtenga una copia del FileManager del repositorio usando Git:
clon de git http://github.com/simogeo/Filemanager.git
o descargue el archivo de Github: https://github.com/simogeo/Filemanager/archive/master.zip
Puede colocar el FileManager en cualquier lugar dentro del directorio raíz de su servicio web.
(2) Haga una copia del archivo de configuración predeterminado ("filemanager.config.default.json" ubicado en el directorio de scripts), eliminando '.default' al final del nombre del archivo y edite las opciones de acuerdo con la siguiente wiki página: https://github.com/simogeo/Filemanager/wiki/Filemanager-configuration-file Echar un vistazo a los casos de estudio de configuración también puede resultarle útil: https://github.com/simogeo/Filemanager/wiki/Specify-user-folder%2C-configuration-cases
(3a) Si está integrando FileManager con FCKEditor, abra su archivo fckconfig.js y busque las líneas que especifican qué explorador de archivos usar para imágenes, enlaces, etc. Mire hacia la parte inferior del archivo. Deberá cambiar líneas como esta:
FCKConfig . ImageBrowser = false ;
FCKConfig . ImageBrowserURL = FCKConfig . BasePath + 'filemanager/browser/default/browser.html?Type=Image&Connector=../../connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ;
...a esto:
FCKConfig . ImageBrowser = true ;
FCKConfig . ImageBrowserURL = '[Path to Filemanager]/index.html' ;
(3b) Si está integrando FileManager con CKEditor 3.x o superior, simplemente configure la URL cuando configure su instancia, así:
CKEDITOR . replace ( 'instancename' , {
filebrowserBrowseUrl : '[Path to Filemanager]/index.html' ,
... other configuration options . . .
} ) ;
Si desea utilizar el modo de diálogo modal (en lugar de ventana emergente), consulte la página wiki dedicada.
(3c) Si está integrando FileManager con TinyMCE (>= 3.0), debe:
Cree una función de devolución de llamada de Javascript que abrirá la página base index.html de FileManager (consulte la URL a continuación para ver ejemplos). Agregue una línea como: "file_browser_callback: 'name_of_callback_function'" en el comando tinyMCE.init. Consulte http://www.tinymce.com. /wiki.php/TinyMCE3x:How-to_implement_a_custom_file_browser para obtener más detalles.
Consulte también la página wiki dedicada, con muestra de TinyMCE 4: https://github.com/simogeo/Filemanager/wiki/How-to-use-the-Filemanager-with-tinyMCE-3-or-4
(4) Por último, pero no menos importante, ¡ preocúpate por la seguridad !
Para conector PHP : copie/pegue /connectors/php/default.config.php
en /connectors/php/user.config.php
para definir su propia función de autenticación. Para hacerlo, encontrará un ejemplo en la página wiki dedicada.
dependencia y compatibilidad de jQuery
Intentamos seguir actualizando la biblioteca principal de jQuery con regularidad. Si, por alguna razón, no puede usar la versión de jQuery incorporada en este momento, Filemanager probablemente funcionará con una versión de jQuery>= 1.6. Tendrás que usar el complemento jQuery.migrate() para usarlo con jQuery versión 1.9+.
Importante : El Administrador de archivos está diseñado para funcionar sin ninguna configuración especial, pero usarlo sin ninguna configuración es MUY inseguro . Configure su propia función de autenticación , basada en el archivo predeterminado y consultando la página wiki dedicada.
Puede crear un conector para el idioma de su elección del lado del servidor siguiendo esta sencilla API. Debe tener una secuencia de comandos en la siguiente ubicación que pueda responder a solicitudes HTTP GET devolviendo un objeto JSON apropiado:
[path to FileManager]/connectors/[language extension]/filemanager.[language extension]
FileManager actualmente incluye conectores para PHP, MVC, JSP, lasso, ASP, ASHX, PL y CFM en las siguientes ubicaciones:
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
Siempre que exista un script en esta ubicación para responder a las solicitudes, puede dividir el código (bibliotecas externas, archivos de configuración, etc.) como mejor le parezca.
Cada respuesta debe incluir dos claves específicas para el manejo de errores: Error y Código. Si se produce un error en su secuencia de comandos, puede completar estas claves con los valores que considere más apropiados. Si no hay ningún error, Error debe permanecer vacío o nulo y el Código debe estar vacío, nulo o cero (0). No utilice cero para errores reales. El siguiente ejemplo sería una respuesta adecuada si el conector utiliza un archivo externo para la configuración (recomendado), pero no se puede encontrar ese archivo:
{
"Error" : " Configuration file missing. " ,
"Code" : -1
}
Su script debe incluir soporte para los siguientes métodos/funciones. Las solicitudes GET de FileManager incluyen un parámetro "modo" que indicará qué tipo de respuesta devolver. Los parámetros adicionales proporcionarán otra información necesaria para cumplir con la solicitud, como el directorio actual.
El método getinfo
devuelve información sobre un único archivo. Las solicitudes con el modo "getinfo" incluirán un parámetro adicional, "ruta", que indica qué archivo inspeccionar. Un parámetro booleano "getsize" indica si se deben devolver las dimensiones del archivo (si es una imagen).
Solicitud de ejemplo:
[path to connector]?mode=getinfo&path=/UserFiles/Image/logo.png&getsize=true
Ejemplo de respuesta:
{
"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
}
Las claves son las siguientes:
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.
El método getfolder
devuelve una matriz de objetos de archivos y carpetas que representan el contenido del directorio dado (indicado por un parámetro "ruta"). Debería llamar al método getinfo para recuperar las propiedades de cada archivo. Un parámetro booleano "getsizes" indica si se deben devolver las dimensiones de la imagen para cada elemento. Las carpetas siempre deben devolverse antes que los archivos. Opcionalmente, se puede especificar un parámetro de "tipo" para restringir los archivos devueltos (según el conector). Si se proporciona un parámetro de "tipo" para la URL principal index.html, el mismo valor de parámetro se reutiliza y se pasa a getfolder. Esto se puede utilizar, por ejemplo, para mostrar sólo archivos de imagen en un árbol del sistema de archivos.
Solicitud de ejemplo:
[path to connector]?mode=getfolder&path=/UserFiles/Image/&getsizes=true&type=images
Ejemplo de respuesta:
{
"/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 clave de la matriz es la ruta a un elemento individual y el valor es el objeto de archivo para ese elemento.
El método rename
cambia el nombre del elemento en la ruta indicada en el parámetro "antiguo" por el nombre indicado en el parámetro "nuevo" y devuelve un objeto que indica los resultados de esa acción.
Solicitud de ejemplo:
[path to connector]?mode=rename&old=/UserFiles/Image/logo.png&new=id.png
Ejemplo de respuesta:
{
"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 "
}
El método move
mueve el archivo o directorio "antiguo" al directorio "nuevo" especificado. Es posible especificar una ruta absoluta desde el directorio raíz del archivo o una ruta relativa desde el elemento "antiguo". El valor "root" es obligatorio para garantizar que las rutas relativas no superen fileRoot.
Solicitud de ejemplo: mover archivo
[path to connector]?mode=move&old=/uploads/images/original/Image/logo.png&new=/moved/&root=/uploads/images/
Ejemplo de respuesta:
{
"Error" : " No error " ,
"Code" : 0 ,
"Old Path" : " /uploads/images/original/Image/ " ,
"Old Name" : " logo.png " ,
"New Path" : " /uploads/images/moved/ " ,
"New Name" : " logo.png "
}
Solicitud de ejemplo: Mover directorio a un directorio que no existe (se creará)
[path to connector]?mode=move&old=/uploads/images/original/Image&new=../new_dir/&root=/uploads/images/
Ejemplo de respuesta:
{
"Error" : " No error " ,
"Code" : 0 ,
"Old Path" : " /uploads/images/original/ " ,
"Old Name" : " Image " ,
"New Path" : " /uploads/new_dir/ " ,
"New Name" : " Image "
}
El método delete
elimina el elemento en la ruta indicada.
Solicitud de ejemplo:
[path to connector]?mode=delete&path=/UserFiles/Image/logo.png
Ejemplo de respuesta:
{
"Error" : " No error " ,
"Code" : 0 ,
"Path" : " /UserFiles/Image/logo.png "
}
El método add
agrega el archivo cargado a la ruta especificada. A diferencia de los otros métodos, este método debe devolver su respuesta JSON envuelta en un HTML, por lo que el tipo MIME de la respuesta es texto/html en lugar de texto/plain. El formulario de carga en el Administrador de archivos pasa la ruta actual como un parámetro POST junto con el archivo cargado. La respuesta incluye la ruta y el nombre utilizado para almacenar el archivo. El nombre del archivo cargado debe ser seguro de usar como componente de ruta en una URL, por lo que, como mínimo, debe estar codificado en URL.
Ejemplo de respuesta:
{
"Path" : " /UserFiles/Image/ " ,
"Name" : " new_logo.png " ,
"Error" : " No error " ,
"Code" : 0
}
El método replace
permite al usuario reemplazar un archivo específico cualquiera que sea el nuevo nombre de archivo; al menos, el nuevo archivo debe tener la misma extensión que el original. El archivo antiguo se sobrescribe automáticamente. A diferencia de los otros métodos, este método debe devolver su respuesta JSON envuelta en un HTML, por lo que el tipo MIME de la respuesta es texto/html en lugar de texto/plain. El formulario de carga dinámica en el Administrador de archivos pasa la ruta del archivo actual como un parámetro POST junto con el archivo cargado. La respuesta incluye la ruta y el nombre utilizado para almacenar el archivo.
Ejemplo de respuesta:
{
"Path" : " /UserFiles/Image/ " ,
"Name" : " new_logo.png " ,
"Error" : " No error " ,
"Code" : 0
}
El método editfile
devuelve el contenido de un archivo determinado (pasado como parámetro). Le brinda al usuario la posibilidad de editar un archivo en línea (las extensiones se especifican en el archivo de configuración). Manejado como solicitud GET.
Solicitud de ejemplo:
[path to connector]?mode=editfile&path=/UserFiles/MyFolder/myfile.txt
Ejemplo de respuesta:
{
"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! "
}
El método save
sobrescribirá el contenido del archivo actual. El formulario de edición en el Administrador de archivos pasa el modo (como savefile
), la ruta del archivo actual y el contenido como parámetros POST.
Ejemplo de respuesta:
{
"Error" : " No error " ,
"Code" : 0 ,
"Path" : " /UserFiles/MyFolder/myfile.txt "
}
El método preview
sirve la imagen solicitada para su visualización. La ruta de la imagen se pasa a través del parámetro path
. Si se pasa el parámetro thumbnail=true
, el método devolverá una miniatura de la imagen. Se puede agregar un parámetro adicional, como la hora UNIX, a la URL para evitar problemas de caché.
Solicitud de ejemplo:
[path to connector]?mode=preview&path=/UserFiles/new%20logo.png&thumbnail=true
El método addfolder
crea un nuevo directorio en el servidor dentro de la ruta indicada.
Solicitud de ejemplo:
[path to connector]?mode=addfolder&path=/UserFiles/&name=new%20logo.png
Ejemplo de respuesta:
{
"Parent" : " /UserFiles/ " ,
"Name" : " new_logo.png " ,
"Error" : " No error " ,
"Code" : 0
}
El método download
entrega el archivo solicitado al usuario. Actualmente utilizamos un tipo MIME de "aplicación/x-descarga" para forzar que el archivo se descargue en lugar de mostrarse en un navegador. En el futuro podremos hacer excepciones para tipos de archivos específicos que a menudo tienen visores en el navegador, como PDF y varios formatos de películas (Flash, Quicktime, etc.).
Solicitud de ejemplo:
[path to connector]?mode=download&path=/UserFiles/new%20logo.png
Copyright (c) 2011-2013 Jason Huck, Simon Georget http://opensource.org/licenses/MIT
Por el presente se otorga permiso, sin cargo, a cualquier persona que obtenga una copia de este software y los archivos de documentación asociados (el "Software"), para operar con el Software sin restricciones, incluidos, entre otros, los derechos de uso, copia, modificación, fusión. , publicar, distribuir, sublicenciar y/o vender copias del Software, y permitir que las personas a quienes se les proporciona el Software lo hagan, sujeto a las siguientes condiciones:
El aviso de derechos de autor anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.
EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO, PERO NO LIMITADO A, LAS GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DE DERECHOS DE AUTOR SERÁN RESPONSABLES DE NINGÚN RECLAMO, DAÑO U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN CONTRACTUAL, AGRAVIO O DE OTRA MANERA, QUE SURJA DE, FUERA DE O EN RELACIÓN CON EL SOFTWARE O EL USO U OTRAS NEGOCIOS EN EL SOFTWARE.