FM เป็นตัวจัดการไฟล์โอเพ่นซอร์สที่เผยแพร่ภายใต้ใบอนุญาต MIT มันเป็นทางเลือกแทน elfinder หรือ CKFinder
สิ่งสำคัญ : แพ็คเกจนี้ เลิกใช้แล้ว
ตอนนี้ โปรดใช้แพ็คเกจ RichFileManager พร้อมฟีเจอร์และการปรับปรุงใหม่ๆ มากมาย
Filemanager อยู่ภายใต้ใบอนุญาตฟรี หากคุณต้องการสนับสนุนการพัฒนา filemanager หรือเพียงขอบคุณผู้ดูแลหลักด้วยการจ่ายเบียร์ คุณสามารถบริจาคได้โดยคลิกที่ปุ่มต่อไปนี้:
Filemanager ได้รับการบันทึกไว้อย่างดีในหน้าวิกิ API ดูด้านล่าง
คำนำ
เนื่องจากมีการเปลี่ยนแปลงหลายอย่างเมื่อเร็วๆ นี้ จึงมีเฉพาะตัวเชื่อมต่อ PHP และ MVC เท่านั้น คุณสามารถลองใช้เวอร์ชันล่าสุดสำหรับตัวเชื่อมต่ออื่นๆ ได้ แต่ไม่มีการรับประกัน ตัวเชื่อมต่อเหล่านี้จะใช้คุณลักษณะทั้งหมดและทำงานได้อย่างถูกต้อง
หากต้องการใช้ตัวเชื่อมต่ออื่น โปรดดาวน์โหลดเวอร์ชัน v0.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
(3a) หากคุณกำลังรวม 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' ;
(3b) หากคุณกำลังรวม FileManager เข้ากับ CKEditor 3.x หรือสูงกว่า เพียงตั้งค่า URL เมื่อคุณกำหนดค่าอินสแตนซ์ของคุณ ดังนี้:
CKEDITOR . replace ( 'instancename' , {
filebrowserBrowseUrl : '[Path to Filemanager]/index.html' ,
... other configuration options . . .
} ) ;
หากคุณต้องการใช้ โหมดโต้ตอบโมดอล (แทนป๊อปอัป) โปรดดูที่หน้าวิกิเฉพาะ
(3c) หากคุณกำลังรวม 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 สำหรับรายละเอียดเพิ่มเติม
ดูหน้าวิกิเฉพาะพร้อมตัวอย่าง 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() เพื่อใช้กับ jQuery เวอร์ชัน 1.9+
สิ่งสำคัญ : Filemanager ได้รับการออกแบบมาให้ทำงานโดยไม่มีการกำหนดค่าพิเศษใดๆ แต่ การใช้งานโดยไม่มีการกำหนดค่าใดๆ นั้นไม่ปลอดภัยอย่างยิ่ง โปรดตั้ง ค่าฟังก์ชันการตรวจสอบสิทธิ์ ของคุณเอง ตามไฟล์เริ่มต้นและอ้างอิงถึงหน้าวิกิเฉพาะ
คุณสามารถสร้างตัวเชื่อมต่อสำหรับภาษาฝั่งเซิร์ฟเวอร์ที่คุณเลือกได้โดยทำตาม API ง่ายๆ นี้ คุณต้องมีสคริปต์ในตำแหน่งต่อไปนี้ซึ่งสามารถตอบสนองต่อคำขอ 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 requests from FileManager include a parameter "mode" which will indicate which type of response to return. Additional parameters will provide other information required to fulfill the request, such as the current directory.
The getinfo
method returns information about a single file. คำขอที่มีโหมด "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 เพื่อดึงคุณสมบัติของแต่ละไฟล์ พารามิเตอร์บูลีน "getsize" ระบุว่าควรส่งคืนขนาดรูปภาพสำหรับแต่ละรายการหรือไม่ ควรส่งคืนโฟลเดอร์ก่อนไฟล์เสมอ สามารถเลือกระบุพารามิเตอร์ "type" เพื่อจำกัดไฟล์ที่ส่งคืนได้ (ขึ้นอยู่กับตัวเชื่อมต่อ) หากกำหนดพารามิเตอร์ "type" สำหรับ URL ดัชนี.html หลัก ค่าพารามิเตอร์เดียวกันจะถูกนำมาใช้ซ้ำและส่งผ่านไปยัง getfolder This can be used for example to only show image files in a file system tree.
Example Request:
[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 หรือเส้นทางสัมพัทธ์จากรายการ "เก่า" ค่า "root" เป็นสิ่งจำเป็นเพื่อรักษาความปลอดภัยให้พาธสัมพันธ์ไม่อยู่เหนือ 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
Example Response:
{
"Error" : " No error " ,
"Code" : 0 ,
"Path" : " /UserFiles/Image/logo.png "
}
วิธี add
จะเพิ่มไฟล์ที่อัพโหลดไปยังเส้นทางที่ระบุ วิธีนี้จะต้องส่งคืนการตอบสนอง JSON ที่รวมอยู่ใน HTML ซึ่งต่างจากวิธีอื่นๆ ดังนั้นการตอบสนองประเภท MIME จะเป็น text/html แทนที่จะเป็น text/plain แบบฟอร์มการอัพโหลดในตัวจัดการไฟล์จะส่งผ่านพาธปัจจุบันเป็นพารามิเตอร์ POST พร้อมกับไฟล์ที่อัพโหลด การตอบกลับจะรวมเส้นทางและชื่อที่ใช้จัดเก็บไฟล์ด้วย ชื่อของไฟล์ที่อัปโหลดควรใช้เป็นส่วนประกอบเส้นทางใน URL ได้อย่างปลอดภัย ดังนั้นจึงต้องเข้ารหัส URL เป็นอย่างน้อย
Example Response:
{
"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
จะเขียนทับเนื้อหาของไฟล์ปัจจุบัน The edit form in the File Manager passes the mode (as savefile
), path of the current file and the content as POST parameters.
ตัวอย่างคำตอบ:
{
"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 ฯลฯ)
Example Request:
[path to connector]?mode=download&path=/UserFiles/new%20logo.png
ลิขสิทธิ์ (c) 2011-2013 Jason Huck, Simon Georget http://opensource.org/licenses/MIT
อนุญาตให้บุคคลใดก็ตามที่ได้รับสำเนาของซอฟต์แวร์นี้และไฟล์เอกสารที่เกี่ยวข้อง ("ซอฟต์แวร์") อนุญาตโดยไม่เสียค่าใช้จ่าย เพื่อจัดการกับซอฟต์แวร์โดยไม่มีข้อจำกัด รวมถึงแต่ไม่จำกัดเพียงสิทธิ์ในการใช้ คัดลอก ปรับเปลี่ยน ผสาน เผยแพร่ แจกจ่าย ให้อนุญาตช่วง และ/หรือขายสำเนาของซอฟต์แวร์ และอนุญาตให้บุคคลที่ได้รับซอฟต์แวร์นี้สามารถทำได้ ภายใต้เงื่อนไขต่อไปนี้:
ประกาศเกี่ยวกับลิขสิทธิ์ข้างต้นและประกาศการอนุญาตนี้จะรวมอยู่ในสำเนาทั้งหมดหรือส่วนสำคัญของซอฟต์แวร์
ซอฟต์แวร์นี้มีให้ "ตามที่เป็น" โดยไม่มีการรับประกันใดๆ ทั้งโดยชัดแจ้งหรือโดยนัย ซึ่งรวมถึงแต่ไม่จำกัดเพียงการรับประกันความสามารถในการค้าขาย ความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ และการไม่ละเมิด ไม่ว่าในกรณีใดผู้เขียนหรือผู้ถือลิขสิทธิ์จะต้องรับผิดต่อการเรียกร้องค่าเสียหายหรือความรับผิดอื่นใดไม่ว่าในการกระทำของสัญญาการละเมิดหรืออย่างอื่นที่เกิดขึ้นจากหรือเกี่ยวข้องกับซอฟต์แวร์หรือการใช้งานหรือข้อตกลงอื่น ๆ ใน ซอฟต์แวร์.