FM هو مدير ملفات مفتوح المصدر تم إصداره بموجب ترخيص MIT. إنه بديل لـ elfinder أو CKFinder.
هام : تم إهمال هذه الحزمة.
الآن، يرجى استخدام حزمة RichFileManager مع عدد من الميزات والتحسينات الجديدة.
مدير الملفات تحت ترخيص مجاني. إذا كنت ترغب في دعم تطوير مدير الملفات أو مجرد شكر المشرف الرئيسي عليه من خلال دفع ثمن البيرة، فيمكنك التبرع بالنقر فوق الزر التالي :
تم توثيق Filemanager بشكل كبير على صفحات الويكي. API، انظر أدناه.
الديباجة
نظرًا لأن العديد من التغييرات قد تم إجراؤها مؤخرًا، فلا يتوفر الآن سوى موصلات PHP وMVC. يمكنك تجربة أحدث إصدار للموصلات الأخرى، ولكن بدون ضمان، فإنها تنفذ جميع الميزات وتعمل بشكل صحيح.
لاستخدام موصلات أخرى، يرجى تنزيل الإصدار 0.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:
استنساخ بوابة 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
(3أ) إذا كنت تقوم بدمج 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' ;
(3ب) إذا كنت تقوم بدمج FileManager مع CKEditor 3.x أو أعلى، فما عليك سوى تعيين عنوان URL عند تكوين المثيل الخاص بك، كما يلي:
CKEDITOR . replace ( 'instancename' , {
filebrowserBrowseUrl : '[Path to Filemanager]/index.html' ,
... other configuration options . . .
} ) ;
إذا كنت تريد استخدام وضع الحوار المشروط (بدلاً من النافذة المنبثقة)، فيرجى الرجوع إلى صفحة wiki المخصصة.
(3ج) إذا كنت تقوم بدمج 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 لمزيد من التفاصيل.
راجع أيضًا صفحة wiki المخصصة، مع نموذج 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 المضمن الآن، فمن المحتمل أن يعمل Filemanager مع إصدار jQuery >= 1.6. سيتعين عليك استخدام البرنامج المساعد jQuery.migrate() لاستخدامه مع الإصدار 1.9 من jQuery والإصدارات الأحدث.
هام : تم تصميم Filemanager للعمل بدون أي تكوين خاص ولكن استخدامه بدون أي تكوين يعد أمرًا غير آمن على الإطلاق . يرجى إعداد وظيفة المصادقة الخاصة بك، بناءً على الملف الافتراضي والرجوع إلى صفحة wiki المخصصة.
يمكنك إنشاء رابط للغة التي تختارها من جانب الخادم باتباع واجهة برمجة التطبيقات البسيطة هذه. يجب أن يكون لديك برنامج نصي في الموقع التالي يمكنه الاستجابة لطلبات 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
طالما أن البرنامج النصي موجود في هذا الموقع للرد على الطلبات، فيمكنك تقسيم التعليمات البرمجية (المكتبات الخارجية، ملفات التكوين، وما إلى ذلك) بالطريقة التي تراها مناسبة.
يجب أن تتضمن كل استجابة مفتاحين خاصين بمعالجة الأخطاء: الخطأ والرمز. إذا حدث خطأ في البرنامج النصي الخاص بك، فيمكنك ملء هذه المفاتيح بأي قيم تشعر أنها الأكثر ملاءمة. إذا لم يكن هناك خطأ، فيجب أن يظل الخطأ فارغًا أو خاليًا، ويجب أن يكون الرمز فارغًا أو خاليًا أو صفرًا (0). لا تستخدم الصفر لأية أخطاء فعلية. سيكون المثال التالي بمثابة الاستجابة المناسبة إذا كان الموصل يستخدم ملفًا خارجيًا للتكوين (مستحسن)، ولكن لا يمكن العثور على هذا الملف:
{
"Error" : " Configuration file missing. " ,
"Code" : -1
}
يجب أن يتضمن البرنامج النصي الخاص بك دعمًا للطرق/الوظائف التالية. تتضمن طلبات GET من FileManager معلمة "الوضع" التي ستشير إلى نوع الاستجابة المطلوب إرجاعها. ستوفر المعلمات الإضافية معلومات أخرى مطلوبة لتلبية الطلب، مثل الدليل الحالي.
تقوم طريقة getinfo
بإرجاع معلومات حول ملف واحد. ستتضمن الطلبات ذات الوضع "getinfo" معلمة إضافية، "المسار"، تشير إلى الملف الذي سيتم فحصه. تشير المعلمة المنطقية "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 dir أو المسار النسبي من العنصر "القديم". تعد قيمة "الجذر" إلزامية لضمان عدم تجاوز المسارات النسبية لـ 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
، فسوف تقوم الطريقة بإرجاع صورة مصغرة. يمكن إضافة معلمة إضافية مثل وقت UNIX إلى عنوان URL لمنع حدوث مشكلة في ذاكرة التخزين المؤقت.
طلب مثال:
[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
حقوق الطبع والنشر (ج) 2011-2013 لجيسون هاك، وسيمون جورجيت http://opensource.org/licenses/MIT
يُمنح الإذن مجانًا لأي شخص يحصل على نسخة من هذا البرنامج وملفات الوثائق المرتبطة به ("البرنامج")، للتعامل في البرنامج دون قيود، بما في ذلك، على سبيل المثال لا الحصر، حقوق الاستخدام والنسخ والتعديل والدمج. ونشر و/أو توزيع وترخيص من الباطن و/أو بيع نسخ من البرنامج، والسماح للأشخاص الذين تم توفير البرنامج لهم بالقيام بذلك، وفقًا للشروط التالية:
يجب تضمين إشعار حقوق الطبع والنشر أعلاه وإشعار الإذن هذا في جميع النسخ أو الأجزاء الكبيرة من البرنامج.
يتم توفير البرنامج "كما هو"، دون أي ضمان من أي نوع، صريحًا أو ضمنيًا، بما في ذلك، على سبيل المثال لا الحصر، ضمانات القابلية للتسويق والملاءمة لغرض معين وعدم الانتهاك. لا يتحمل المؤلفون أو أصحاب حقوق الطبع والنشر بأي حال من الأحوال المسؤولية عن أي مطالبة أو أضرار أو مسؤولية أخرى، سواء في إجراء العقد أو الضرر أو غير ذلك، الناشئة عن أو خارج أو فيما يتعلق بالبرنامج أو الاستخدام أو المعاملات الأخرى في برمجة.