最近不得不研究FCKEDITOR,而且是ASP版本。對其文件上傳後的重命名,很鬱悶。下面記錄我修改的過程,部分函數來自網絡。定位到:editor/filemanager/connectors/asp/io.asp
主要是修改:SanitizeFileName這個函數,並添加取得擴展名和文件重命名的方法,詳細代碼如下:
複製代碼代碼如下:
' Do a cleanup of the file name to avoid possible problems
function SanitizeFileName( sNewFileName )
Dim oRegex
Dim oExt
Set oRegex = New RegExp
oRegex.Global = True
if ( ConfigForceSingleExtension = True ) then
oRegex.Pattern = /.(?![^.]*$)
sNewFileName = oRegex.Replace( sNewFileName, _ )
'取得文件擴展名
sNewFileName = makefilename(now()).&GetExtend(sNewFileName)
end if
' remove / / | : ? * < > and control characters
oRegex.Pattern = (//|//|/||:|/?|/*||/<|/>|[/u0000-/u001F]|/u007F)
SanitizeFileName = oRegex.Replace( sNewFileName, _ )
Set oRegex = Nothing
end function
Function GetExtend(filename)
dim tmp
if filename<> then
tmp=mid(filename,instrrev(filename,.)+1,len(filename)-instrrev(filename,.))
tmp=LCase(tmp)
if instr(1,tmp,asp)>0 or instr(1,tmp,php)>0 or instr(1,tmp,php3)>0 or instr(1,tmp,aspx)>0 then
getextend=txt
else
getextend=tmp
end if
else
getextend=
end if
End Function
function makefilename(fname)
fname = fname '前fname為變量,後fname為函數參數引用
fname = replace(fname,-,)
fname = replace(fname, ,)
fname = replace(fname,:,)
fname = replace(fname,PM,)
fname = replace(fname,AM,)
fname = replace(fname,上午,)
fname = replace(fname,下午,)
makefilename = fname
end function
懶得改的話就直接拷貝下面的代碼:
複製代碼代碼如下:
<%
' FCKeditor - The text editor for Internet - http://www.fckeditor.net
' Copyright (C) 2003-2009 Frederico Caldeira Knabben
'
' == BEGIN LICENSE ==
'
' Licensed under the terms of any of the following licenses at your
' choice:
'
' - GNU General Public License Version 2 or later (the GPL)
' http://www.gnu.org/licenses/gpl.html
'
' - GNU Lesser General Public License Version 2.1 or later (the LGPL)
' http://www.gnu.org/licenses/lgpl.html
'
' - Mozilla Public License Version 1.1 or later (the MPL)
' http://www.mozilla.org/MPL/MPL-1.1.html
'
' == END LICENSE ==
'
' This file include IO specific functions used by the ASP Connector.
%>
<%
function CombinePaths( sBasePath, sFolder)
sFolder = replace(sFolder, /, /)
CombinePaths = RemoveFromEnd( sBasePath, / ) & / & RemoveFromStart( sFolder, / )
end function
function CombineLocalPaths( sBasePath, sFolder)
sFolder = replace(sFolder, /, /)
' The RemoveFrom* functions use RegExp, so we must escape the /
CombineLocalPaths = RemoveFromEnd( sBasePath, // ) & / & RemoveFromStart( sFolder, // )
end function
Function GetResourceTypePath( resourceType, sCommand )
if ( sCommand = QuickUpload) then
GetResourceTypePath = ConfigQuickUploadPath.Item( resourceType )
else
GetResourceTypePath = ConfigFileTypesPath.Item( resourceType )
end if
end Function
Function GetResourceTypeDirectory( resourceType, sCommand )
if ( sCommand = QuickUpload) then
if ( ConfigQuickUploadAbsolutePath.Item( resourceType ) <> ) then
GetResourceTypeDirectory = ConfigQuickUploadAbsolutePath.Item( resourceType )
else
' Map the UserFiles path to a local directory.
GetResourceTypeDirectory = Server.MapPath( ConfigQuickUploadPath.Item( resourceType ) )
end if
else
if ( ConfigFileTypesAbsolutePath.Item( resourceType ) <> ) then
GetResourceTypeDirectory = ConfigFileTypesAbsolutePath.Item( resourceType )
else
' Map the UserFiles path to a local directory.
GetResourceTypeDirectory = Server.MapPath( ConfigFileTypesPath.Item( resourceType ) )
end if
end if
end Function
Function GetUrlFromPath( resourceType, folderPath, sCommand )
GetUrlFromPath = CombinePaths( GetResourceTypePath( resourceType, sCommand ), folderPath )
End Function
Function RemoveExtension( fileName )
RemoveExtension = Left( fileName, InStrRev( fileName, . ) - 1 )
End Function
Function ServerMapFolder( resourceType, folderPath, sCommand )
Dim sResourceTypePath
' Get the resource type directory.
sResourceTypePath = GetResourceTypeDirectory( resourceType, sCommand )
' Ensure that the directory exists.
CreateServerFolder sResourceTypePath
' Return the resource type directory combined with the required path.
ServerMapFolder = CombineLocalPaths( sResourceTypePath, folderPath )
End Function
Sub CreateServerFolder( folderPath )
Dim oFSO
Set oFSO = Server.CreateObject( Scripting.FileSystemObject )
Dim sParent
sParent = oFSO.GetParentFolderName( folderPath )
' If folderPath is a network path (//server/folder/) then sParent is an empty string.
' Get out.
if (sParent = ) then exit sub
' Check if the parent exists, or create it.
If ( NOT oFSO.FolderExists( sParent ) ) Then CreateServerFolder( sParent )
If ( oFSO.FolderExists( folderPath ) = False ) Then
On Error resume next
oFSO.CreateFolder( folderPath )
if err.number<>0 then
dim sErrorNumber
Dim iErrNumber, sErrDescription
iErrNumber = err.number
sErrDescription = err.Description
On Error Goto 0
Select Case iErrNumber
Case 52
sErrorNumber = 102 ' Invalid Folder Name.
Case 70
sErrorNumber = 103 ' Security Error.
Case 76
sErrorNumber = 102 ' Path too long.
Case Else
sErrorNumber = 110
End Select
SendError sErrorNumber, CreateServerFolder( & folderPath & ) : & sErrDescription
end if
End If
Set oFSO = Nothing
End Sub
Function IsAllowedExt( extension, resourceType )
Dim oRE
Set oRE = New RegExp
oRE.IgnoreCase = True
oRE.Global = True
Dim sAllowed, sDenied
sAllowed = ConfigAllowedExtensions.Item( resourceType )
sDenied = ConfigDeniedExtensions.Item( resourceType )
IsAllowedExt = True
If sDenied <> Then
oRE.Pattern = sDenied
IsAllowedExt = Not oRE.Test( extension )
End If
If IsAllowedExt And sAllowed <> Then
oRE.Pattern = sAllowed
IsAllowedExt = oRE.Test( extension )
End If
Set oRE = Nothing
End Function
Function IsAllowedType( resourceType )
Dim oRE
Set oRE = New RegExp
oRE.IgnoreCase = False
oRE.Global = True
oRE.Pattern = ^( & ConfigAllowedTypes & )$
IsAllowedType = oRE.Test( resourceType )
Set oRE = Nothing
End Function
Function IsAllowedCommand( sCommand )
Dim oRE
Set oRE = New RegExp
oRE.IgnoreCase = True
oRE.Global = True
oRE.Pattern = ^( & ConfigAllowedCommands & )$
IsAllowedCommand = oRE.Test( sCommand )
Set oRE = Nothing
End Function
function GetCurrentFolder()
dim sCurrentFolder
dim oRegex
sCurrentFolder = Request.QueryString(CurrentFolder)
If ( sCurrentFolder = ) Then sCurrentFolder = /
' Check the current folder syntax (must begin and start with a slash).
If ( Right( sCurrentFolder, 1 ) <> / ) Then sCurrentFolder = sCurrentFolder & /
If ( Left( sCurrentFolder, 1 ) <> / ) Then sCurrentFolder = / & sCurrentFolder
' Check for invalid folder paths (..)
If ( InStr( 1, sCurrentFolder, .. ) <> 0 OR InStr( 1, sCurrentFolder, / ) <> 0) Then
SendError 102,
End If
Set oRegex = New RegExp
oRegex.Global = True
oRegex.Pattern = (//.)|(//)|([//:/*/?//</>/|]|[/u0000-/u001F]|/u007F)
if (oRegex.Test(sCurrentFolder)) Then
SendError 102,
End If
GetCurrentFolder = sCurrentFolder
end function
' Do a cleanup of the folder name to avoid possible problems
function SanitizeFolderName( sNewFolderName )
Dim oRegex
Set oRegex = New RegExp
oRegex.Global = True
' remove . / / | : ? * < > and control characters
oRegex.Pattern = (/.|//|//|/||:|/?|/*||/<|/>|[/u0000-/u001F]|/u007F)
SanitizeFolderName = oRegex.Replace( sNewFolderName, _ )
Set oRegex = Nothing
end function
' Do a cleanup of the file name to avoid possible problems
function SanitizeFileName( sNewFileName )
Dim oRegex
Dim oExt
Set oRegex = New RegExp
oRegex.Global = True
if ( ConfigForceSingleExtension = True ) then
oRegex.Pattern = /.(?![^.]*$)
sNewFileName = oRegex.Replace( sNewFileName, _ )
'取得文件擴展名
sNewFileName = makefilename(now())&.&GetExtend(sNewFileName)
end if
' remove / / | : ? * < > and control characters
oRegex.Pattern = (//|//|/||:|/?|/*||/<|/>|[/u0000-/u001F]|/u007F)
SanitizeFileName = oRegex.Replace( sNewFileName, _ )
Set oRegex = Nothing
end function
Function GetExtend(filename)
dim tmp
if filename<> then
tmp=mid(filename,instrrev(filename,.)+1,len(filename)-instrrev(filename,.))
tmp=LCase(tmp)
if instr(1,tmp,asp)>0 or instr(1,tmp,php)>0 or instr(1,tmp,php3)>0 or instr(1,tmp,aspx)>0 then
getextend=txt
else
getextend=tmp
end if
else
getextend=
end if
End Function
function makefilename(fname)
fname = fname '前fname為變量,後fname為函數參數引用
fname = replace(fname,-,)
fname = replace(fname, ,)
fname = replace(fname,:,)
fname = replace(fname,PM,)
fname = replace(fname,AM,)
fname = replace(fname,上午,)
fname = replace(fname,下午,)
makefilename = fname
end function
' This is the function that sends the results of the uploading process.
Sub SendUploadResults( errorNumber, fileUrl, fileName, customMsg )
Response.Clear
Response.Write <script type=text/javascript>
' Minified version of the document.domain automatic fix script (#1919).
' The original script can be found at _dev/domain_fix_template.js
Response.Write (function(){var d=document.domain;while (true){try{var A=window.parent.document.domain;break;}catch(e) {};d=d.replace(/ .*?(?:/.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})() ;
Response.Write window.parent.OnUploadCompleted( & errorNumber & , & Replace( fileUrl, , / ) & , & Replace( fileName, , / ) & , & Replace( customMsg , , / ) & ) ;
Response.Write </script>
Response.End
End Sub
%>