ฉันต้องศึกษา FCKEditor เมื่อเร็ว ๆ นี้และเป็นเวอร์ชัน ASP เปลี่ยนชื่อไฟล์หลังจากอัพโหลดมันน่าหดหู่มาก บันทึกกระบวนการปรับเปลี่ยนของฉันและฟังก์ชั่นบางอย่างมาจากเครือข่าย วางตำแหน่งไปที่: editor/fileManager/connectors/asp/io.asp
วัตถุประสงค์หลักคือการปรับเปลี่ยนฟังก์ชั่น: sanitizefilename และเพิ่มวิธีการเพื่อรับส่วนขยายและการเปลี่ยนชื่อไฟล์
การคัดลอกรหัสมีดังนี้:
'ทำความสะอาดชื่อไฟล์เพื่อหลีกเลี่ยงปัญหาที่เป็นไปได้
ฟังก์ชั่น sanitizefilename (snewfilename)
อูรีเจ็กซ์สลัว
dim oext
SET OREGEX = ใหม่ regexp
Oregex.global = true
if (configforcesingleextension = true) จากนั้น
Oregex.pattern = /.(?!
snewfilename = oregex.replace (snewfilename, _)
'รับนามสกุลไฟล์
snewfilename = makefilename (ตอนนี้ ()). & getExtend (snewfilename)
สิ้นสุดถ้า
'ลบ / / |
oregex.pattern = (// | // |/|/|: |/? |/*||/<| //////> | [/u0000-/u001f] |/u007f)
sanitizefilename = oregex.replace (snewfilename, _)
ตั้งค่า Oregex = ไม่มีอะไร
ฟังก์ชันสิ้นสุด
ฟังก์ชั่น getExtend (ชื่อไฟล์)
Dim TMP
ถ้าชื่อไฟล์ <> แล้ว
tmp = mid (ชื่อไฟล์, instrrev (ชื่อไฟล์,.)+1, len (ชื่อไฟล์) -instrrev (ชื่อไฟล์,.))))
TMP = LCASE (TMP)
ถ้า instr (1, tmp, asp)> 0 หรือ instr (1, tmp, php)> 0 หรือ instr (1, tmp, php3)> 0 หรือ instr (1, tmp, aspx)> 0 จากนั้น
getExtend = txt
อื่น
getExtend = tmp
สิ้นสุดถ้า
อื่น
getExtend =
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
ฟังก์ชั่น makefilename (fname)
fname = fname 'fname แรกเป็นตัวแปรและ fname หลังคือการอ้างอิงพารามิเตอร์ฟังก์ชัน
fname = แทนที่ (fname,-,)
fname = แทนที่ (fname ,,)
fname = แทนที่ (fname,:,)
fname = แทนที่ (fname, pm,)
fname = แทนที่ (fname, am,)
fname = แทนที่ (fname, morning,)
fname = แทนที่ (fname, บ่าย)
makefilename = fname
ฟังก์ชันสิ้นสุด
หากคุณขี้เกียจเกินไปที่จะเปลี่ยนแปลงเพียงคัดลอกรหัสต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
-
'fckeditor - ตัวแก้ไขข้อความสำหรับอินเทอร์เน็ต - http://www.fckeditor.net
'Copyright (C) 2003-2009 Frederico Caldeira Knabben
-
'== เริ่มใบอนุญาต ==
-
'ได้รับใบอนุญาตภายใต้ข้อกำหนดของใบอนุญาตใด ๆ ต่อไปนี้ที่คุณ
' ทางเลือก:
-
' - GNU ทั่วไปใบอนุญาตสาธารณะรุ่น 2 หรือใหม่กว่า (The GPL)
'http://www.gnu.org/licenses/gpl.html
-
' - GNU Lesser Public Public License เวอร์ชัน 2.1 หรือใหม่กว่า (LGPL)
'http://www.gnu.org/licenses/lgpl.html
-
' - ใบอนุญาตสาธารณะ Mozilla เวอร์ชัน 1.1 หรือใหม่กว่า (MPL)
'http://www.mozilla.org/mpl/mpl-1.1.html
-
'== end license ==
-
'ไฟล์นี้มีฟังก์ชั่นเฉพาะของ IO ที่ใช้โดยตัวเชื่อมต่อ ASP
-
-
ฟังก์ชั่น combinepaths (sbasepath, sfolder)
sfolder = แทนที่ (sfolder, /, /)
combinePaths = removeFromend (sbasepath, /) & / & removeFromStart (sfolder, /)
ฟังก์ชันสิ้นสุด
ฟังก์ชั่น combinelocalpaths (sbasepath, sfolder)
sfolder = แทนที่ (sfolder, /, /)
'ฟังก์ชั่น removeFrom* ใช้ regexp ดังนั้นเราต้องหลบหนี /
combinelocalpaths = removeFromend (sbasepath, //) & / & removeFromStart (sfolder, //)
ฟังก์ชันสิ้นสุด
ฟังก์ชั่น getResourCetyPepath (ResourceType, Scommand)
ถ้า (scommand = quickupload) แล้ว
getResourCetyPepath = configQuickupLoadPath.item (ResourceType)
อื่น
getResourCetyPepath = configFileTyPespath.Item (ResourceType)
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
ฟังก์ชั่น getResourcetypedirectory (ResourceType, Scommand)
ถ้า (scommand = quickupload) แล้ว
if (configQuickupLoadabSolutePath.Item (ResourceType) <>) แล้ว
getResourCetypedirectory = configquickupLoadabsolutepath.item (ResourceType)
อื่น
'แผนที่เส้นทาง UserFiles ไปยังไดเรกทอรีท้องถิ่น
getResourCetypedirectory = server.mappath (configquickuploadpath.item (ResourceType))
สิ้นสุดถ้า
อื่น
if (configFileTypesAbsolutepath.item (ResourceType) <>) แล้ว
getResourCetypedirectory = configFileTypesAbsolutepath.item (ResourceType)
อื่น
'แผนที่เส้นทาง UserFiles ไปยังไดเรกทอรีท้องถิ่น
getResourCetyPedirectory = server.mappath (configfileTypespath.item (ResourceType)))
สิ้นสุดถ้า
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
ฟังก์ชั่น geturlfrompath (ResourceType, FolderPath, Scommand)
geturlfrompath = combinePaths (getResourCetyPepath (ResourceType, Scommand), FolderPath)
ฟังก์ชันสิ้นสุด
ฟังก์ชั่น remverextension (ชื่อไฟล์)
removeExtension = ซ้าย (ชื่อไฟล์, instrrev (ชื่อไฟล์,.) - 1)
ฟังก์ชันสิ้นสุด
ฟังก์ชั่น ServerMapFolder (ResourceType, FolderPath, Scommand)
สลัว sresourcetypepath
'รับไดเรกทอรีประเภททรัพยากร
SRESOURCETYPEPATH = GETRESOURCETYPEDIRECTORY (ResourceType, Scommand)
'ตรวจสอบให้แน่ใจว่ามีไดเรกทอรี
createserverfolder sresourcetypepath
'ส่งคืนไดเรกทอรีประเภททรัพยากรรวมกับเส้นทางที่ต้องการ
ServerMapFolder = CombinelocalPaths (SRESORCETYPEPATH, FolderPath)
ฟังก์ชันสิ้นสุด
Sub CreateServerFolder (FolderPath)
หรี่
set of so = server.createObject (scripting.filesystemobject)
สลัวสลัว
sparent = OFSO.getParentFolderName (FolderPath)
'ถ้า FolderPath เป็นพา ธ เครือข่าย (// เซิร์ฟเวอร์/โฟลเดอร์/) แล้ว Sparent เป็นสตริงว่างเปล่า
'ออกไป
ถ้า (sparent =) จากนั้นออกจากย่อย
'ตรวจสอบว่าผู้ปกครองมีอยู่หรือสร้าง
ถ้า (ไม่ใช่ OFSO.FolderExists (sparent)) จากนั้น CreateServerFolder (sparent)
ถ้า (OFSO.FolderExists (FolderPath) = FALSE) จากนั้น
เมื่อเกิดข้อผิดพลาดต่อไป
OFSO.CreateFolder (FolderPath)
ถ้า err.number <> 0 แล้ว
Serrornumber สลัว
dim ierrnumber, serrdescription
ierrnumber = err.number
serrdescription = err.description
ในข้อผิดพลาด goto 0
เลือกกรณี ierrnumber
กรณีที่ 52
SerroRnumber = 102 'ชื่อโฟลเดอร์ที่ไม่ถูกต้อง
กรณี 70
SerroRnumber = ข้อผิดพลาดด้านความปลอดภัย 103 '
กรณี 76
SerroRnumber = 102 'เส้นทางยาวเกินไป
กรณีอื่น
Serrornumber = 110
สิ้นสุดเลือก
Senderror Serrornumber, CreateserverFolder (& FolderPath &): & serrdescription
สิ้นสุดถ้า
สิ้นสุดถ้า
set of so = ไม่มีอะไร
สิ้นสุดย่อย
ฟังก์ชั่น isallowedext (ส่วนขยาย, ResourceType)
แร่หรอก
ตั้งค่า ore = ใหม่ regexp
ore.ignorecase = true
ore.global = true
สลัวซีด, sdenied
sallowed = configallowedextensions.item (ResourceType)
sdenied = configdeniedextensions.item (ResourceType)
isallowedext = true
ถ้า sdenied <> แล้ว
Ore.pattern = sdenied
isallowedext = not ore.test (ส่วนขยาย)
สิ้นสุดถ้า
ถ้า isallowedext และ sallowed <> แล้ว
Ore.pattern = sallowed
isallowedext = ore.test (ส่วนขยาย)
สิ้นสุดถ้า
ตั้งค่า ree = ไม่มีอะไร
ฟังก์ชันสิ้นสุด
ฟังก์ชั่น isallowedtype (ResourceType)
แร่หรอก
ตั้งค่า ore = ใหม่ regexp
ore.ignorecase = false
ore.global = true
Ore.pattern = ^(& configallowedTypes &) $
isallowedType = ore.test (ResourceType)
ตั้งค่า ree = ไม่มีอะไร
ฟังก์ชันสิ้นสุด
ฟังก์ชั่น IsallowedCommand (Scommand)
แร่หรอก
ตั้งค่า ore = ใหม่ regexp
ore.ignorecase = true
ore.global = true
Ore.pattern = ^(& configallowedCommands &) $
isallowedCommand = ore.test (Scommand)
ตั้งค่า ree = ไม่มีอะไร
ฟังก์ชันสิ้นสุด
ฟังก์ชั่น getCurrentFolder ()
สลัว scurrentfolder
อูรีเจ็กซ์สลัว
ScurrentFolder = request.QueryString (CurrentFolder)
ถ้า (scurrentFolder =) จากนั้น scurrentFolder = /
'ตรวจสอบไวยากรณ์โฟลเดอร์ปัจจุบัน (ต้องเริ่มต้นและเริ่มต้นด้วยสแลช)
ถ้า (ขวา (ScurrentFolder, 1) <> /) จากนั้น ScurrentFolder = ScurrentFolder & /
ถ้า (ซ้าย (scurrentFolder, 1) <> /) จากนั้น scurrentFolder = / & scurrentFolder
'ตรวจสอบเส้นทางโฟลเดอร์ที่ไม่ถูกต้อง (.. )
if (instr (1, scurrentFolder, .. ) <> 0 หรือ instr (1, scurrentFolder, /) <> 0) จากนั้น
Senderror 102
สิ้นสุดถ้า
SET OREGEX = ใหม่ regexp
Oregex.global = true
oregex.pattern = (//.)|(// /)|( อยู่ที่ /:/*//?///<//>/THANI
ถ้า (Oregex.test (ScurrentFolder)) แล้ว
Senderror 102
สิ้นสุดถ้า
getCurrentFolder = scurrentFolder
ฟังก์ชันสิ้นสุด
'ทำความสะอาดชื่อโฟลเดอร์เพื่อหลีกเลี่ยงปัญหาที่เป็นไปได้
ฟังก์ชั่น sanitizefoldername (snewfoldername)
อูรีเจ็กซ์สลัว
SET OREGEX = ใหม่ regexp
Oregex.global = true
'ลบ
oregex.pattern = (/.|// //// /|/|:|/?|/*| /<|//////////>| [/u0000-/u001fING
sanitizeFolderName = oregex.replace (snewfoldername, _)
ตั้งค่า Oregex = ไม่มีอะไร
ฟังก์ชันสิ้นสุด
'ทำความสะอาดชื่อไฟล์เพื่อหลีกเลี่ยงปัญหาที่เป็นไปได้
ฟังก์ชั่น sanitizefilename (snewfilename)
อูรีเจ็กซ์สลัว
dim oext
SET OREGEX = ใหม่ regexp
Oregex.global = true
if (configforcesingleextension = true) จากนั้น
Oregex.pattern = /.(?!
snewfilename = oregex.replace (snewfilename, _)
'รับนามสกุลไฟล์
snewfilename = makefilename (ตอนนี้ ()) &. & getExtend (snewfilename)
สิ้นสุดถ้า
'ลบ / / |
oregex.pattern = (// | // |/|/|: |/? |/*||/<| //////> | [/u0000-/u001f] |/u007f)
sanitizefilename = oregex.replace (snewfilename, _)
ตั้งค่า Oregex = ไม่มีอะไร
ฟังก์ชันสิ้นสุด
ฟังก์ชั่น getExtend (ชื่อไฟล์)
Dim TMP
ถ้าชื่อไฟล์ <> แล้ว
tmp = mid (ชื่อไฟล์, instrrev (ชื่อไฟล์,.)+1, len (ชื่อไฟล์) -instrrev (ชื่อไฟล์,.))))
TMP = LCASE (TMP)
ถ้า instr (1, tmp, asp)> 0 หรือ instr (1, tmp, php)> 0 หรือ instr (1, tmp, php3)> 0 หรือ instr (1, tmp, aspx)> 0 จากนั้น
getExtend = txt
อื่น
getExtend = tmp
สิ้นสุดถ้า
อื่น
getExtend =
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
ฟังก์ชั่น makefilename (fname)
fname = fname 'fname แรกเป็นตัวแปรและ fname หลังคือการอ้างอิงพารามิเตอร์ฟังก์ชัน
fname = แทนที่ (fname,-,)
fname = แทนที่ (fname ,,)
fname = แทนที่ (fname,:,)
fname = แทนที่ (fname, pm,)
fname = แทนที่ (fname, am,)
fname = แทนที่ (fname, morning,)
fname = แทนที่ (fname, บ่าย)
makefilename = fname
ฟังก์ชันสิ้นสุด
'นี่คือฟังก์ชั่นที่ส่งผลลัพธ์ของกระบวนการอัปโหลด
SubploadResults (ErrorNumber, fileUrl, ชื่อไฟล์, custommsg)
Response.Clear
Response.write <script type = text/javascript>
'เวอร์ชัน miniified ของ document.domain script fix อัตโนมัติ (#1919)
'สคริปต์ดั้งเดิมสามารถพบได้ที่ _dev/domain_fix_template.js
response.write (function () {var d = document.domain; ในขณะที่ (จริง) {ลอง {var a = window.parent.document.domain; break;} catch (e) {}; d = d.replace (/ .*? (?:/. | $)/, ''); ถ้า (d.length == 0) break; ลอง {document.domain = d;} catch (e) {break;}}}) () ;
Response.write window.parent.onuploadcompleted (& errornumber &, & แทนที่ (fileurl ,, /) &, & แทนที่ (ชื่อไฟล์ ,, /) &, & แทนที่ (custommsg ,, /) &);
Response.write </script>
Response.end
สิ้นสุดย่อย
-