fckeditor给文件(包括图片)及文件夹增加删除功能

方法一:不修改源码

1、在\fckeditor\editor\filemanager\browser\default文件夹中找到frmresourceslist.html文件,将

oListManager.GetFileRowHtml和oListManager.GetFolderRowHtml代码修改如下:

        //在文件夹后放置“删除”
        oListManager.GetFolderRowHtml = function (folderName, folderPath, folderUrl) {
            
// Build the link to view the folder.
            var sLink = '<a href="#" onclick="OpenFolder(\'' + ProtectPath(folderPath) + '\');return false;">';
            
return '<tr>' +
            
'<td width="16">' +
                sLink 
+
                
'<img alt="" src="images/Folder.gif" width="16" height="16" border="0"><\/a>' +
            
'<\/td><td nowrap colspan="2">&nbsp;' +
                sLink 
+
                folderName 
+
                
'<\/a>' +
        
'<\/td><td align="right"><a href="#" onclick="DeleteFolder(\'' +
                folderName + '\',\'' +
                ProtectPath(folderUrl) +
        
'\'
);return false;">删除</a></td><\/tr>';
        }

        
//在文件后放置“删除”
        oListManager.GetFileRowHtml = function (fileName, fileUrl, fileSize) {
            
var sLink = '<a href="#" onclick="OpenFile(\'' + ProtectPath(fileUrl) + '\');   return false;">';
            
var sIcon = oIcons.GetIcon(fileName);
            
return '<tr>' + '<td width="16">' + sLink + '<img alt="" src="images/icons/'
            
+ sIcon + '.gif" width="16" height="16"  border="0"> <\/a>'
            
+ '<\/td><td>&nbsp;' + sLink + fileName
            
+ '<\/a> <a href="#" onclick="deleteFile(\'' +
                fileName + '\',\'' + ProtectPath(fileUrl)
            + '\');" style="color: #FF9933;"> 删除 <\/a>' +
 '<\/td><td align="right" nowrap>&nbsp;'
            
+ fileSize + ' KB' + '<\/td><\/tr>';
        }
2、在该文件的js中增加如下代码:
        //产生不重复的随机数
        var rn = Math.ceil(Math.random() * 1000000);
        
var rnch = rn;
        
function rndnum() {
            
while (rn == rnch) rn = Math.ceil(Math.random() * 1000000);
            rnch 
= rn;
            
return rn;
        }
        
// 删除文件
        function deleteFile(fileName, file) {
            
var xml = new ActiveXObject("MSXML2.XMLHTTP");
            
if (confirm('您确定要删除“' + fileName + '”吗?')) {
                xml.open(
"get""FCKdel_file.aspx?filePath=" + file + "&UD=" +
 rndnum(), 
false);
                xml.send();
                Refresh();
                
switch (xml.responseText.substring(01)) {
                    
case "1": alert("文件删除成功!");
                        
break;
                    
case "0": alert("文件删除失败!请检查文件是否存在!");
                        
break;
                    
case "2": alert("您不是系统管理员,无权进行操作!");
                        
break;
                    
default: alert("未知错误!");
                        
break;
                }
            }
        }
        
//删除文件夹
        function DeleteFolder(folderName, folderPath) {
            
var xml = new ActiveXObject("MSXML2.XMLHTTP");
            
if (confirm('您确定要删除文件夹“' + folderName + '”和里面的所有文件吗?')) {
                xml.open(
"get""FCKDel_folder.aspx?folderPath=" + 
escape(folderPath 
+ folderName) + "&UD=" + rndnum(), false);
                xml.send();
                Refresh();
                
switch (xml.responseText.substring(01)) {
                    
case "1": alert("文件夹删除成功!");
                        
break;
                    
case "0": alert("文件夹删除失败!请检查文件是否存在!");
                        
break;
                    
case "2": alert("您不是系统管理员,无权进行操作!");
                        
break;
                    
default: alert("未知错误!");
                        
break;
                }
            }

       }

 继续修改文件“frmresourceslist.htm”,找到 GetFoldersAndFilesCallBack 函数中的下面这行,增加红色部分的代码:
oHtml.Append( oListManager.GetFolderRowHtml( sFolderName, sCurrentFolderPath + sFolderName + "/", sCurrentFolderUrl ) );


3、增加文件
  在同一个目录(指frmresourceslist.html所在目录)中增加FCKdel_file.aspx,用于删除文件。代码如下:
<%@ Page Language="C#" %>

<%    
    
if (Request.QueryString["UD"] != null)
    {
        try
        {
            
string file = Request.QueryString["filePath"].Trim();
            
string filePath = Server.MapPath(file);
            
if (System.IO.File.Exists(filePath))
            {
                System.IO.File.Delete(filePath);
                Response.Write(
"1");
            }
            
else
            {
                Response.Write(
"0");
            }
        }
        catch
        {
            Response.Write(
"0");
        }
    }
    
else Response.Write("2");
%>
 

  在同一个目录(指frmresourceslist.html所在目录)中增加FCKDel_folder.aspx,用于删除文件夹。代码如下:

<%@ Page Language="C#" %>

<%    
    
if (Request.QueryString["UD"] != null)
    {
        try
        {
            
string file = HttpUtility.UrlDecode(Request.QueryString["folderPath"].Trim());
            
string filePath = Server.MapPath(file);
            
if (System.IO.Directory.Exists(filePath))
            {
                System.IO.Directory.Delete(filePath, 
true);
                Response.Write(
"1");
            }
            
else
            {
                Response.Write(
"0");
            }
        }
        catch
        {
            Response.Write(
"0");
        }
    }
    
else Response.Write("2");
%>


 完成,测试,成功。

方法二:修改源码(本文所针对版本:FCKeditor: 2.6.4,FCKeditor.Net: 2.6.3。)

首先下载FCKeditor控件的源码——FCKeditor.Net。

1. 打开项目 FCKeditor.Net,打开文件“FileBrowser/Connector.cs”,为 class Connector 增加如下两个成员函数:
//删除文件
        private void DelFile(XmlNode connectorNode, string resourceType, string currentFolder)
        {
            HttpContext hc 
= HttpContext.Current;
            
string file = hc.Server.MapPath(HttpUtility.UrlDecode(hc.Request["FileUrl"], System.Text.Encoding.UTF8));
            
if (System.IO.File.Exists(file))
                System.IO.File.Delete(file);
            
else
                hc.Response.Write(
@"<error number=""1"" originaldescription=""unable to locate file"">");
        }

        
//删除文件夹
        private void DelFolder(XmlNode connectorNode, string resourceType, string currentFolder)
        {
            HttpContext hc 
= HttpContext.Current;
            
string folder = hc.Server.MapPath(HttpUtility.UrlDecode(hc.Request["FolderName"], System.Text.Encoding.UTF8));
            
if (System.IO.Directory.Exists(folder))
                System.IO.Directory.Delete(folder, 
true);
            
else
                hc.Response.Write(
@"<error number=""2"" originaldescription=""unable to locate folder"">");
        }
2. 在文件“Connector.cs”中找到 OnLoad 函数,在 switch 部分增加以下红色代码:
            // Execute the required command.
            switch (sCommand)
            {
                
case "GetFolders":
                    
this.GetFolders(oConnectorNode, sResourceType, sCurrentFolder);
                    
break;
                
case "GetFoldersAndFiles":
                    
this.GetFolders(oConnectorNode, sResourceType, sCurrentFolder);
                    
this.GetFiles(oConnectorNode, sResourceType, sCurrentFolder);
                    
break;
                case "CreateFolder":
                    
this.CreateFolder(oConnectorNode, sResourceType, sCurrentFolder);
                    
break;
                
case "DelFile":
                    
this.DelFile(oConnectorNode, sResourceType, sCurrentFolder);
                    
break;
                
case "DelFolder":
                    
this.DelFolder(oConnectorNode, sResourceType, sCurrentFolder);
                    
break
;
                
default:
                    XmlResponseHandler.SendError(Response, 
1"Command is not allowed");
                    
break;
            }
3. 编译 FCKeditor.net 并关闭该项目。将生成的 FredCK.FCKeditorV2.dll 拷贝出来用于Web项目的引用。
4. 建立 C# 测试项目,并在其中部署 FCKeditor 2.6.4(使用第 3 步生成的 FredCK.FCKeditorV2.dll)。
5. 打开“fckeditor/editor/filemanager/browser/default/frmresourceslist.htm”,修改以下两个函数
oListManager.GetFolderRowHtml = function( folderName, folderPath, folderUrl )
{
  
// Build the link to view the folder.
  var sLink = '<a href="#" onclick="OpenFolder(\'' + ProtectPath(folderPath) + 
'\');return false;">';

  
return '<tr>' +
    
'<td width="16">' +
      sLink 
+
      
'<img alt="" src="images/Folder.gif" width="16" height="16" border="0"><\/a>' +
    
'<\/td><td nowrap colspan="2"> ' +
      sLink 
+
      folderName 
+
      
'<\/a>' +
    
'<\/td><td align="right"><a href="#" onclick="DelFolder(\''+folderName+'
\',\''+ ProtectPath(folderUrl) + '\'
);return false;">删除</a></td><\/tr>';
}

oListManager.GetFileRowHtml 
= function( fileName, fileUrl, fileSize )
{
  
// Build the link to view the folder.
  var sLink = '<a href="#" onclick="OpenFile(\'' + ProtectPath(fileUrl) + 
'\');return false;">' ;

  
// Get the file icon.
  var sIcon = oIcons.GetIcon( fileName ) ;

  
return '<tr>' +
    
'<td width="16">' +
      sLink 
+
      
'<img alt="" src="images/icons/' + sIcon + '.gif" width="16" height="16" border="0"><\/a>' +
    
'<\/td><td> ' +
      sLink 
+
      fileName 
+
      
'<\/a>' +
    
'<\/td><td align="right" nowrap> ' +
      fileSize 
+
      
' KB' +
    
'<\/td><td align="right"><a href="#" onclick="DelFile(\''+fileName+'\',\'' + 
ProtectPath(fileUrl) + '\'
);return false;">删除</a></td><\/tr>';
}
 

6. 继续修改文件“frmresourceslist.htm”,在 OpenFile 函数后面增加以下两个函数:

function DelFile( fileName, fileUrl )
{
  
if (confirm('您确定要删除文件“' + fileName + '”吗?'))
    oConnector.SendCommand(
"DelFile""FileUrl=" + escape(fileUrl), Refresh);
}

function DelFolder( folderName, folderPath )
{
  
if (confirm('您确定要删除文件夹“' + folderName + '”和里面的所有文件吗?'))
    oConnector.SendCommand(
"DelFolder""FolderName=" + escape(folderPath + folderName), Refresh);
}

7. 继续修改文件“frmresourceslist.htm”,找到 GetFoldersAndFilesCallBack 函数中的下面这行,增加红色部分的代码:

oHtml.Append( oListManager.GetFolderRowHtml( sFolderName, sCurrentFolderPath + sFolderName + "/", sCurrentFolderUrl ) );
至此,删除功能增加完毕。

 参考文章:http://www.cnblogs.com/mxh691/archive/2009/06/24/1510032.html

http://hi.baidu.com/yangw80/blog/item/0292e0f00d345ea6a40f52a5.html
 
原文地址:https://www.cnblogs.com/scottckt/p/1900284.html