FM ist ein Open-Source-Dateimanager, der unter MIT-Lizenz veröffentlicht wird. Es ist eine Alternative zu elfinder oder CKFinder.
WICHTIG : Dieses Paket ist veraltet .
Bitte verwenden Sie jetzt das RichFileManager -Paket mit einer Reihe neuer Funktionen und Verbesserungen.
Der Dateimanager steht unter einer kostenlosen Lizenz. Wenn Sie die Entwicklung des Dateimanagers unterstützen oder sich einfach mit einem Bier beim Hauptbetreuer bedanken möchten, können Sie eine Spende tätigen, indem Sie auf die folgende Schaltfläche klicken:
Der Dateimanager ist auf den Wiki-Seiten ausführlich dokumentiert. API, siehe unten.
Präambel
Da in letzter Zeit viele Änderungen vorgenommen wurden, sind jetzt nur noch PHP- und MVC-Konnektoren verfügbar. Sie können die neueste Version für andere Konnektoren ausprobieren, es gibt jedoch keine Garantie dafür, dass diese alle Funktionen implementieren und ordnungsgemäß funktionieren.
Um andere Konnektoren zu verwenden, laden Sie bitte die Version v0.8 von https://github.com/simogeo/Filemanager/archive/v0.8.zip herunter (PHP-, ASHX-, ASP-, CFM-, Lasso-, PL- und JSP-Konnektoren sind verfügbar)
Eine JSP/Java-Connector-Implementierung ist verfügbar unter: https://github.com/th-schwarz/C5Connector.Java
(1) Checken Sie mit Git eine Kopie des FileManagers aus dem Repository aus:
Git-Klon http://github.com/simogeo/Filemanager.git
oder laden Sie das Archiv von Github herunter: https://github.com/simogeo/Filemanager/archive/master.zip
Sie können den FileManager an einer beliebigen Stelle in Ihrem Webserver-Stammverzeichnis platzieren.
(2) Erstellen Sie eine Kopie der Standardkonfigurationsdatei („filemanager.config.default.json“ im Skriptverzeichnis), entfernen Sie „.default“ am Ende des Dateinamens und bearbeiten Sie die Optionen gemäß dem folgenden Wiki Seite: https://github.com/simogeo/Filemanager/wiki/Filemanager-configuration-file Ein Blick auf die Konfigurationsfallstudie kann auch für Sie hilfreich sein: https://github.com/simogeo/Filemanager/wiki/Specify-user-folder%2C-configuration-cases
(3a) Wenn Sie den FileManager mit FCKEditor integrieren, öffnen Sie Ihre fckconfig.js-Datei und suchen Sie nach den Zeilen, die angeben, welcher Dateibrowser für Bilder, Links usw. verwendet werden soll. Schauen Sie zum Ende der Datei. Sie müssen Zeilen wie diese ändern:
FCKConfig . ImageBrowser = false ;
FCKConfig . ImageBrowserURL = FCKConfig . BasePath + 'filemanager/browser/default/browser.html?Type=Image&Connector=../../connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ;
...dazu:
FCKConfig . ImageBrowser = true ;
FCKConfig . ImageBrowserURL = '[Path to Filemanager]/index.html' ;
(3b) Wenn Sie den FileManager mit CKEditor 3.x oder höher integrieren, legen Sie einfach die URL fest, wenn Sie Ihre Instanz konfigurieren, etwa so:
CKEDITOR . replace ( 'instancename' , {
filebrowserBrowseUrl : '[Path to Filemanager]/index.html' ,
... other configuration options . . .
} ) ;
Wenn Sie den modalen Dialogmodus (anstelle des Popup-Fensters) verwenden möchten, lesen Sie bitte die entsprechende Wiki-Seite.
(3c) Wenn Sie den FileManager mit TinyMCE (>= 3.0) integrieren, sollten Sie:
Erstellen Sie eine Javascript-Rückruffunktion, die die FileManager-Basisseite index.html öffnet (Beispiele finden Sie unter der URL unten). Fügen Sie eine Zeile wie „file_browser_callback: 'name_of_callback_function'“ im Befehl tinyMCE.init hinzu. Siehe http://www.tinymce.com /wiki.php/TinyMCE3x:How-to_implement_a_custom_file_browser für weitere Details.
Siehe auch die spezielle Wiki-Seite mit TinyMCE 4-Beispiel: https://github.com/simogeo/Filemanager/wiki/How-to-use-the-Filemanager-with-tinyMCE-3-or-4
(4) Zu guter Letzt: Sorgen Sie sich um die Sicherheit !
Für den PHP-Connector : Kopieren Sie die /connectors/php/default.config.php
und fügen Sie sie in /connectors/php/user.config.php
ein, um Ihre eigene Authentifizierungsfunktion zu definieren. Ein Beispiel dazu finden Sie auf der entsprechenden Wiki-Seite.
jQuery-Abhängigkeit und -Kompatibilität
Wir versuchen, die jQuery-Kernbibliothek regelmäßig zu aktualisieren. Wenn Sie die eingebettete jQuery-Version aus irgendeinem Grund gerade nicht verwenden können, funktioniert der Dateimanager wahrscheinlich mit einer jQuery-Version >= 1.6. Sie müssen das Plugin jQuery.migrate() verwenden, um es mit jQuery Version 1.9+ zu verwenden.
Wichtig : Der Dateimanager ist so konzipiert, dass er ohne spezielle Konfiguration funktioniert . Die Verwendung ohne Konfiguration ist jedoch SEHR unsicher . Bitte richten Sie Ihre eigene Authentifizierungsfunktion ein, basierend auf der Standarddatei und unter Bezugnahme auf die entsprechende Wiki-Seite.
Sie können einen Connector für die serverseitige Sprache Ihrer Wahl erstellen, indem Sie dieser einfachen API folgen. Sie müssen an der folgenden Stelle über ein Skript verfügen, das auf HTTP-GET-Anfragen reagieren kann, indem es ein entsprechendes JSON-Objekt zurückgibt:
[path to FileManager]/connectors/[language extension]/filemanager.[language extension]
FileManager umfasst derzeit Konnektoren für PHP, MVC, JSP, Lasso, ASP, ASHX, PL und CFM an den folgenden Standorten:
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
Solange an dieser Stelle ein Skript vorhanden ist, um auf Anfragen zu reagieren, können Sie den Code (externe Bibliotheken, Konfigurationsdateien usw.) nach Belieben aufteilen.
Jede Antwort sollte zwei Schlüssel zur Fehlerbehandlung enthalten: Fehler und Code. Wenn in Ihrem Skript ein Fehler auftritt, können Sie diese Schlüssel mit den Werten füllen, die Ihrer Meinung nach am besten geeignet sind. Wenn kein Fehler vorliegt, sollte Error leer oder null bleiben und Code sollte leer, null oder Null (0) sein. Verwenden Sie für tatsächliche Fehler keine Null. Das folgende Beispiel wäre eine geeignete Antwort, wenn der Connector eine externe Datei zur Konfiguration verwendet (empfohlen), diese Datei jedoch nicht gefunden werden kann:
{
"Error" : " Configuration file missing. " ,
"Code" : -1
}
Ihr Skript sollte Unterstützung für die folgenden Methoden/Funktionen enthalten. GET-Anfragen von FileManager enthalten einen Parameter „mode“, der angibt, welche Art von Antwort zurückgegeben werden soll. Zusätzliche Parameter stellen weitere Informationen bereit, die zur Erfüllung der Anfrage erforderlich sind, beispielsweise das aktuelle Verzeichnis.
Die getinfo
Methode gibt Informationen zu einer einzelnen Datei zurück. Anfragen mit dem Modus „getinfo“ enthalten einen zusätzlichen Parameter „path“, der angibt, welche Datei überprüft werden soll. Ein boolescher Parameter „getsize“ gibt an, ob die Abmessungen der Datei (falls es sich um ein Bild handelt) zurückgegeben werden sollen.
Beispielanfrage:
[path to connector]?mode=getinfo&path=/UserFiles/Image/logo.png&getsize=true
Beispielantwort:
{
"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
}
Die Schlüssel lauten wie folgt:
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.
Die getfolder
Methode gibt ein Array von Datei- und Ordnerobjekten zurück, die den Inhalt des angegebenen Verzeichnisses darstellen (angegeben durch einen „Pfad“-Parameter). Es sollte die Methode getinfo aufrufen, um die Eigenschaften jeder Datei abzurufen. Ein boolescher Parameter „getsizes“ gibt an, ob Bildabmessungen für jedes Element zurückgegeben werden sollen. Ordner sollten immer vor Dateien zurückgegeben werden. Optional kann ein „type“-Parameter angegeben werden, um zurückgegebene Dateien einzuschränken (abhängig vom Connector). Wenn ein „type“-Parameter für die Haupt-URL index.html angegeben wird, wird derselbe Parameterwert wiederverwendet und an getfolder übergeben. Dies kann beispielsweise verwendet werden, um nur Bilddateien in einem Dateisystembaum anzuzeigen.
Beispielanfrage:
[path to connector]?mode=getfolder&path=/UserFiles/Image/&getsizes=true&type=images
Beispielantwort:
{
"/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
}
}
Jeder Schlüssel im Array ist der Pfad zu einem einzelnen Element und der Wert ist das Dateiobjekt für dieses Element.
Die rename
benennt das Element unter dem im Parameter „alt“ angegebenen Pfad in den im Parameter „neu“ angegebenen Namen um und gibt ein Objekt zurück, das die Ergebnisse dieser Aktion angibt.
Beispielanfrage:
[path to connector]?mode=rename&old=/UserFiles/Image/logo.png&new=id.png
Beispielantwort:
{
"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 "
}
Die move
verschiebt eine „alte“ Datei oder ein „altes“ Verzeichnis in das angegebene „neue“ Verzeichnis. Es ist möglich, den absoluten Pfad vom Dateistammverzeichnis oder den relativen Pfad vom „alten“ Element anzugeben. Der Wert „root“ ist obligatorisch, um sicherzustellen, dass relative Pfade nicht über fileRoot hinausgehen.
Beispielanfrage: Datei verschieben
[path to connector]?mode=move&old=/uploads/images/original/Image/logo.png&new=/moved/&root=/uploads/images/
Beispielantwort:
{
"Error" : " No error " ,
"Code" : 0 ,
"Old Path" : " /uploads/images/original/Image/ " ,
"Old Name" : " logo.png " ,
"New Path" : " /uploads/images/moved/ " ,
"New Name" : " logo.png "
}
Beispielanfrage: Verzeichnis in ein nicht vorhandenes Verzeichnis verschieben (wird erstellt)
[path to connector]?mode=move&old=/uploads/images/original/Image&new=../new_dir/&root=/uploads/images/
Beispielantwort:
{
"Error" : " No error " ,
"Code" : 0 ,
"Old Path" : " /uploads/images/original/ " ,
"Old Name" : " Image " ,
"New Path" : " /uploads/new_dir/ " ,
"New Name" : " Image "
}
Die Methode delete
löscht das Element im angegebenen Pfad.
Beispielanfrage:
[path to connector]?mode=delete&path=/UserFiles/Image/logo.png
Beispielantwort:
{
"Error" : " No error " ,
"Code" : 0 ,
"Path" : " /UserFiles/Image/logo.png "
}
Die add
-Methode fügt die hochgeladene Datei dem angegebenen Pfad hinzu. Im Gegensatz zu den anderen Methoden muss diese Methode ihre JSON-Antwort in einem HTML- zurückgeben, sodass der MIME-Typ der Antwort text/html anstelle von text/plain ist. Das Upload-Formular im Dateimanager übergibt den aktuellen Pfad als POST-Parameter zusammen mit der hochgeladenen Datei. Die Antwort enthält den Pfad sowie den Namen, unter dem die Datei gespeichert wurde. Der Name der hochgeladenen Datei sollte sicher als Pfadkomponente in einer URL verwendet werden können, also mindestens URL-codiert sein.
Beispielantwort:
{
"Path" : " /UserFiles/Image/ " ,
"Name" : " new_logo.png " ,
"Error" : " No error " ,
"Code" : 0
}
Die replace
ermöglicht es dem Benutzer, eine bestimmte Datei unabhängig vom neuen Dateinamen zu ersetzen – zumindest sollte die neue Datei dieselbe Erweiterung haben wie die Originaldatei. Die alte Datei wird automatisch überschrieben. Im Gegensatz zu den anderen Methoden muss diese Methode ihre JSON-Antwort in einem HTML- zurückgeben, sodass der MIME-Typ der Antwort text/html anstelle von text/plain ist. Das dynamische Upload-Formular im Dateimanager übergibt den aktuellen Dateipfad als POST-Parameter zusammen mit der hochgeladenen Datei. Die Antwort enthält den Pfad sowie den Namen, unter dem die Datei gespeichert wurde.
Beispielantwort:
{
"Path" : " /UserFiles/Image/ " ,
"Name" : " new_logo.png " ,
"Error" : " No error " ,
"Code" : 0
}
Die Methode editfile
gibt den Inhalt einer bestimmten Datei zurück (als Parameter übergeben). Es gibt dem Benutzer die Möglichkeit, eine Datei online zu bearbeiten (Erweiterungen werden in der Konfigurationsdatei angegeben). Wird als GET-Anfrage behandelt.
Beispielanfrage:
[path to connector]?mode=editfile&path=/UserFiles/MyFolder/myfile.txt
Beispielantwort:
{
"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! "
}
Die save
überschreibt den Inhalt der aktuellen Datei. Das Bearbeitungsformular im Dateimanager übergibt den Modus (als savefile
), den Pfad der aktuellen Datei und den Inhalt als POST-Parameter.
Beispielantwort:
{
"Error" : " No error " ,
"Code" : 0 ,
"Path" : " /UserFiles/MyFolder/myfile.txt "
}
Die preview
stellt das angeforderte Bild zur Anzeige bereit. Der Bildpfad wird über den path
übergeben. Wenn der Parameter thumbnail=true
übergeben wird, gibt die Methode eine Miniaturansicht des Bildes zurück. Um Cache-Probleme zu vermeiden, kann der URL ein zusätzlicher Parameter wie die UNIX-Zeit hinzugefügt werden.
Beispielanfrage:
[path to connector]?mode=preview&path=/UserFiles/new%20logo.png&thumbnail=true
Die addfolder
-Methode erstellt ein neues Verzeichnis auf dem Server innerhalb des angegebenen Pfads.
Beispielanfrage:
[path to connector]?mode=addfolder&path=/UserFiles/&name=new%20logo.png
Beispielantwort:
{
"Parent" : " /UserFiles/ " ,
"Name" : " new_logo.png " ,
"Error" : " No error " ,
"Code" : 0
}
Bei der download
-Methode wird dem Benutzer die angeforderte Datei bereitgestellt. Wir verwenden derzeit den MIME-Typ „application/x-download“, um zu erzwingen, dass die Datei heruntergeladen und nicht in einem Browser angezeigt wird. In Zukunft werden wir möglicherweise Ausnahmen für bestimmte Dateitypen machen, die häufig über Browser-Viewer verfügen, wie z. B. PDFs und verschiedene Filmformate (Flash, Quicktime usw.).
Beispielanfrage:
[path to connector]?mode=download&path=/UserFiles/new%20logo.png
Copyright (c) 2011-2013 Jason Huck, Simon Georget http://opensource.org/licenses/MIT
Hiermit wird jeder Person, die eine Kopie dieser Software und der zugehörigen Dokumentationsdateien (die „Software“) erhält, kostenlos die Erlaubnis erteilt, mit der Software ohne Einschränkung zu handeln, einschließlich und ohne Einschränkung der Rechte zur Nutzung, zum Kopieren, Ändern und Zusammenführen , Kopien der Software zu veröffentlichen, zu verteilen, unterzulizenzieren und/oder zu verkaufen und Personen, denen die Software zur Verfügung gestellt wird, dies zu gestatten, vorbehaltlich der folgenden Bedingungen:
Der obige Urheberrechtshinweis und dieser Genehmigungshinweis müssen in allen Kopien oder wesentlichen Teilen der Software enthalten sein.
DIE SOFTWARE WIRD „WIE BESEHEN“ ZUR VERFÜGUNG GESTELLT, OHNE JEGLICHE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNG. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHT-INHABER HAFTBAR FÜR JEGLICHE ANSPRÜCHE, SCHÄDEN ODER ANDERE HAFTUNG, WEDER AUS EINER VERTRAGLICHEN HANDLUNG, AUS unerlaubter Handlung ODER ANDERWEITIG, DIE SICH AUS, AUS ODER IN ZUSAMMENHANG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN HANDELN IN DER SOFTWARE ERGEBEN SOFTWARE.